对于 Web 应用程序,安全登录是很重要的。但是目前大多数 Web 系统在发送登录密码时是发送的明文,这样很容易被入侵者监听到密码。
要实现安全登录,可以采用下面两种方法,一种基于非对称加密算法,另一种基于 hmac
算法 。
非对称加密算法中,目前最常用的是 RSA 算法和
ECC(椭圆曲线加密)算法。要采用非对称加密算法实现安全登录的话,首先需要在客户端向服务器端请求登录页面时,服务器生成公钥和私钥,然后将公钥随登录页面一起传递给客户端浏览器,当用户输入完用户名密码点击登录时,登录页面中的
JavaScript
调用非对称加密算法对用户名和密码用用公钥进行加密。然后在提交到服务器端,然后服务器端利用私钥进行解密,然后跟数据库中的用户名密码进行比较,如果一致,则登录成功,否则登录失败。
看上去很简单,但是这里有这样几个问题。目前 RSA 算法中,1024-2048
位的密钥被认为是安全的。如果密钥长度小于这个长度,则认为可以被破解。但这样的长度超过了程序设计语言本身所允许的数字运算范围,需要通过模拟来实现大数运算。ECC
算法的密钥长度要求比 RSA 算法要低一些, ECC 算法中 160 位的密钥长度被认为与 RSA 算法中 1024
位的密钥长度的安全性是等价的。虽然仍然要涉及的模拟大数运算,但 ECC 算法的密钥长度的运算量还算是可以接受的,但是 ECC 算法比 RSA
算法要复杂的多,因此实现起来也很困难。
对称加密算法比非对称加密算法要快得多,为什么不采用对称加密算法呢? 因为对称加密算法需要数据发送方和接受方共用一个密钥,因此如果要在 Web
系统的发送方也就是客户端浏览器对密码进行加密的话,就需要先从服务器端获取密钥,但密钥的传递可能会被监听,加密以后的数据如果也被同时监听到的话,入侵者就可以直接利用监听到的密钥来对加密后的信息进行解密了。
但是如果我们不采用加密算法而采用散列算法对登录密码进行处理的话,可以避免被直接解密出原文,但是如果直接采用 MD5 或者 SHA1
来对登录密码进行处理后提交的话,一旦入侵者监听到散列后的密码,则不需要解密出原文,直接将监听到的数据提交给服务器,就可以实现入侵的目的了。而且,目前 MD5
算法已被破解,SHA1 算法则被证明从理论上可破解,就算采用离线碰撞,也可以找出与原密码等价的密码来。所以直接采用 MD5 或者 SHA1
来对密码进行散列处理也是不可行的。
但是如果在散列算法中加入了密钥,情况就不一样了。hmac
算法正好作了这样的事情,下面我们来看看如何用 hmac 算法实现安全登录
。首先在客户端向服务器端请求登录页面时,服务器端生成一个随机字符串,连同登录页面一同发送给客户端浏览器,当用户输入完用户名密码后,将密码采用 MD5 或者
SHA1 来生成散列值作为密钥,服务器端发送来的随机字符串作为消息数据,进行 hmac
运算。然后将结果提交给服务器。之所以要对用户输入的密码进行散列后再作为密钥,而不是直接作为密钥,是为了保证密钥足够长,而又不会太长。服务器端接受到客户端提交的数据后,将保存在服务器端的随机字符串和用户密码进行相同的运算,然后进行比较,如果结果一致,则认为登录成功,否则登录失败。
这里客户端每次请求时服务器端发送的随机字符串都是不同的,因此即使入侵者监听到了这个随机字符串和加密后的提交的数据,它也无法再次提交相同的数据通过验证。而且通过监听到的数据也无法计算出密钥,所以也就无法伪造登录信息了。
因此目前来看,用 hmac 算法来实现安全登录系统的方法是最可行的。
hurlant 在安全方面似乎研究颇深,他的As3
Crypto Framework 很好的扩展了Adobe的crypto
lib,前面提到的RSA、MD5、SHA等算法皆包含在此lib中。当然我最感兴趣的还是HMAC算法。
As3 Crypto Demo
browse the source , download the source or download the SWC binary
分享到:
相关推荐
运行根目录下jiajie/jiajie.mxml即可
flex设计模式flex设计模式flex设计模式flex设计模式flex设计模式flex设计模式flex设计模式flex设计模式flex设计模式flex设计模式flex设计模式flex设计模式flex设计模式flex设计模式flex设计模式flex设计模式
使用flex AS3实现加密 并且对加密的文件进行解密,经过测试通过可行。
资源是Flex工程,下载后解压,新建一个flex工程然后把src目录中的所有文件复制到新建工程的src目录下即可运行示例
ActionScript Flex Flash DES加密解密算法
AES加密解密算法,提供 c# 和flex 两版本,c#版本完全以flex 版本改写,已经测试。
相同的算法,不同的语言实现RSA加密解密。 RSA加密解密 Flex 和 C#互通代码。因为。net 的加密类与flex crypto不通用,不能实现,c#加密,flex解密,且只能公匙加密、私匙解密。因此整理出两边通用的加密类。实现...
flex 工作流设计器flex 工作流设计器
flex开发的表单设计器,可以完成界面的基本的操作和容器操作
Flex白皮书 Flex cookbok Flex编程指南 Flex设计模式等
以实例讲解Flex4.0的界面设计,示例有登陆及验证码,状态的切换,图形化报表的设计等
Flex3样式设计工具4in1.rarFlex3样式设计工具4in1.rarFlex3样式设计工具4in1.rar
flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图...
《Foundation Flex for Designers》 FLEX设计师基础一书是对FLEX设计操作的入门书籍,通读本书你可以对FLEX设计有一个全面的认识并掌握一些常用技巧。本书并没有用大量篇幅描述设计细节,但本书基本涵盖了大部分常见...
Flex 开发详细设计文档Flex 开发详细设计文档Flex 开发详细设计文档Flex 开发详细设计文档Flex 开发详细设计文档
flex 项目开发(仅限本人下载,加经加密) 解决TitleWindow传值,模块角色分配
FLEX特效FLEX特效FLEX特效FLEX特效 FLEX特效FLEX特效FLEX特效FLEX特效 FLEX特效FLEX特效FLEX特效FLEX特效 FLEX特效FLEX特效FLEX特效FLEX特效
不错的流程设计器,实现了连线,拖动,修改属性等,,,
Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex ...