完整的HMAC加密过程

       在用户端进行请求的时候,如果要上传一些敏感数据,比如用户的密码,身份证号,银行卡信息时一般是需要进行加密,以用户的登录密码为例,说下HMAC加密的过程.

       先说原理 : 通过哈希算法,我们可以验证一段数据是否有效,方法就是对比该数据的哈希值。md5是应用非常广泛的哈希算法.其他的还有SHA-1,SHA-256,等等都行.

       从注册开始

       1.1用户点击了注册 , 客户端拿着账号请求服务器,服务器需要先校验此账号是否存在 , 如果不存在返回一个字符串,我们先叫这个字符串salt(盐),

       1.2客户端拿到了salt,然后把密码输入框的密码和salt进行md5,然后把md5(pwd+salt)的结果给到服务器,服务器保存这个结果作为pwd_md5.注册完成,客户端把salt写入本地的磁盘中.

     用户登录的操作

      2.1用户点击了登录,客户端先检查本地是否保存了salt,如果没有保存(比如用户换了手机登录,或者彻底删除了应用,然后又下载了),在找服务器获取salt,然后使用md5(pwd+salt)加密获得一个字符串,也叫pwd_md5,

      2.2现在客户端有了pwd_md5 , 但是如果每次都以这个字符串上传的话,这个字符串是固定不变的,黑客就不需要你的pwd,直接截取到这个字符串,然后就能模拟你的登录了 , 所以每次给服务器的这个串得是变化的 ,

     2.3 客户端需要在pwd_md5的基础上,在加入一个随机的字符串的md5,这个随机字符串得是服务器给的 , 有效时间为2分钟 , (一般会取时间戳,时间戳到分钟,不能是本地时间), 变成了md5(pwd_md5+随机串) , 然后把这个md5(pwd_md5+随机串)+账号 上传给服务器,

     2.4 服务器拿到了客户端的账号和md5(pwd_md5+随机串)后 , 从数据库取出此账号注册时的pwd_md5 , 然后还有上个接口返回的随机串 , 也用同样的规则 md5(数据库的pwd_md5+随机串)生成一个字符串, 如果是时间戳的话,校验当前分钟和前一分钟 , 最后本地生成的字符串和客户端上传的字符串进行校验,如果匹配成功,则登陆成功.

     用户重置密码

     3.1经过手机号的验证码,或者邮箱校验后,确认了用户身份 , 输入了新的密码 , 然后和登录操作类似 , 服务器重新生成一个salt,返回给客户端

    3.2客户端拿到salt,然后把密码输入框的密码和salt进行md5,然后把md5(pwd+salt)的结果给到服务器,服务器保存这个结果作为新的pwd_md5.重置密码完成. 

   

    注意 : 注册和重置密码的时候是不需要服务器的随机串(一般为时间戳)的 , 这个随机串只在登录时加入.

 

       在整个过程中,可能遭到网络攻击的是服务器返回的随机值,salt和用户发送的结果,而对于截获了这些值的黑客而言这些值是没有意义的,绝无获取用户密码的可能性,随机值的引入使hmac只在当前会话中有效,大大增强了安全性和实用性。

    嗯,结束.

 

 

 

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值