算法目的
- 提供固定的
秘钥
和明文
能够产生不同的密文摘要 - hamc 算法 大概流程是 使用一个秘钥 对明文进行两次散列操作得到密文摘要
- 哈希(散列)函数
- MD5
- SHA1
- SHA256
注册
- 向服务器请求一个随机的秘钥
- 把注册的密码进行 md5.hmac(hamc使用md5的散列函数来操作字符)加密 : md5.hmac(key,message) ==> 密文摘要(key : 秘钥 , message : 明文) : md5.hmac密文摘要
- 把摘要提交到服务器,同时服务器把 该
秘钥
和md5.hmac密文摘要
持久化到数据库
登录
客户端向服务器请求秘钥(注册时候存储的秘钥)
在用户提交数据的时候对密码进行加密 :
md5.hmac(key , pwd) ==> 子摘要
md5.hamc(key , (子摘要 + '当前提交时间')) ==> 总摘要- 当服务器接收到总摘要消息的时候处理流程 :
- 取出 秘钥 key , 存储的密文摘要 pwdDigest
- 根据以下公式计算两段密文摘要 :
md5.hamc(key , '当前提交时间' + pwdDigest) ==>目的摘要1 md5.hamc(key , '当前提交时间 + 1(分钟)' + pwdDigest) ==>目的摘要2
- 如果用户提交的 总摘要 == 目的摘要1 || 总摘要 == 目的摘要2 为密码正确
这样做的好处
注册只有一次, 提交 关键摘要 的操作只有一次,因此受到拦截数据的几率很少
在登录的时候,由于加密使用了系统时间,因此这样可以保证密码摘要的动态性,而且服务器只会辨认一分钟以内的密文摘要,这样做,就算用户提交数据给拦截了,也很少有时间提供给黑客达到模仿正确登录请求
来源:https://www.cnblogs.com/chenyblog/p/4240316.html