WEB应用的安全的登录认证

前些日子看到一个关于安全登录认证的博文,不过该文提到的登录认证算法有点复杂,而且仍然存在一些安全缺陷。想到之前了解过的HMAC算法,我觉得完全可以使用基于HMAC算法来进行 WEB应用的安全的登录认证

所谓安全,其实主要是解决一个问题:在基于明文传输的HTTP协议下隐藏用户输入的密码。当然,同时还需要考虑到用户密码在服务器端同样不能以明文保存。

也许有人会想到一个最简单的想法:在服务器端把密码用HASH算法(比如MD5、SHA1、SHA256等)加密之后保存,在客户端同样对用户密码进行HASH之后再传到服务器进行验证……想法很好,不过仔细想想,这其实和明文密码没有区别,两端的HASH计算只不过是把用户密码变了个样子而已,就好像——用户输入的是HASH过后的密码,然后明文传输进行登录一样。

言归正传,考虑到服务器端需要较为安全的保存密码,可以将用户密码进行HASH,并在HASH的时候引入SALT(盐)。SALT在保存密码的时候随机生成,并随HASH的结果一起保存在服务器的数据库内。比如我们可以建这样一张用户表:

字段名 说明
username 用户名,一般不区分大小写    
salt 盐,文本,随机生成
hashpass 加密后的用户密码,通过算法HASH(salt, password)生成

需要注意的是,这里在计算hashpass的时候也可以将用户名计算在内,但要考虑用户名不分区大小写时的情况,所以可以是:HASH(L_CASE(username), salt, password)

现在不考虑安全传输的情况下,用户登录验证过程可能是这样:

  1. 1. 用户输入用户名U和密码P,提交到服务端
  2. 2. 服务端通过U找到数据库中的相应的salt和hashpass
  3. 3. 使用salt计算出用户输入密码的hash值,H = HASH(salt, P)
    或者是HMAC(L_CASE(U), salt, P)
  4. 4. 对比计算结果H
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值