由于相同数据 hash 得到的结果是一样的 . 那么市面上大量万亿级 hash 结果记录数据库的存在 , 这个不可逆的算法 也另类的变成了可解密的存在.
【RSA加密原理&密码学&HASH】因此 , 我们使用时经常有以下几种操作 :
- 加盐 (早期比较普遍的做法)
- 嵌套 hash
- 动态盐
- Hmac (也可以说成动态盐的一种吧)
- ... 等等
HMAC 使用一个密钥加密 , 并且做了两次散列 . 在实际开发中 , 密钥往往来自于服务器下发给客户端 并且可能是根据账户绑定的 . 并需要结合实际业务需求来设定注册与登录逻辑 (新设备授权等方式来决定服务器是否可以下发密钥给客户端)
看到这可能大家也跟我一样 都有个疑问 .
疑问
我不管你是如何 嵌套 加盐 HMAC 等什么方式去对密码做处理. 既然你登录是一个账号一个加密后的密码. 我抓包工具抓到就可以直接调用接口实现登录.
是啊 , 那不就 GG 了?
这就牵扯到接口安全的问题 , 其处理方法有很多种, 例如所有请求用 HTTPS , 并且使用对称性加密和非对称性加密结合等等方式对数据进行加密.
当然再安全的加密算法也有被破解的风险. 因此以下这种方式 , 大家可以理解参考一下 , 它能比较有效的解决抓包问题 :
解答
- 注册时
- 同样使用 HMAC 的模式 , 也就是注册时 , 客户端把用户名传给服务器 .
- 服务器随机生成一个密钥返回给客户端 , 并绑定这个密钥到用户表改用户里.
- 客户端拿这个 key 将用户明文密码进行 HMAC 散列后发给服务器保存.
- 登录时
- 登录时将用户 HMAC 之后的 hash 值 加上精确到分的时间戳 ( 时间统一为服务器下发时间 , 相信大家项目也都是使用了服务器时间. ) 然后进行散列.
- 服务器收到请求 , 分别验证当前时间和前一分钟时间加上之前存储的 HMAC 后的密码进行 hash . 两次有一次成功即为登录成功.
为什么以上方式可以有效防护到接口被抓包的情况 ?
- 用户 HMAC 之后的 hash 值 只有在注册该账户时被传输过一次 .
- 抓到接口中 时间戳加 HMAC 之后的 hash 值进行散列 很难猜出嵌套方式.
- 使用抓到的接口中的源数据 ( 时间戳加 HMAC 之后的 hash 值 ) 每次都不一样 , 而且有效期只有最多 1 分 59 秒,最少一分钟 (有效期可灵活控制) 也就是说抓包人员抓到请求源数据后 , 必须在两分钟以内登录 , 否则就会失效.
可能有小伙伴碰到过上传云盘的文件被和谐的情况 , 并且改了名字或者后缀名重新传还是不行. 其实这就是 HASH 的一种运用场景 . 要 理解 HASH 是对二进制数据进行散列 . 那么改名字和后缀名其文件二进制是不会变化的 .

文章插图
但是压缩是可以的 .

文章插图
也就是说压缩是会改变内存大小 , 其内部二进制散列之后的结果也会变化 . 同样 base64也是会改变二进制数据的.
推荐阅读
- 普洱茶减肥原理
- 新风系统的工作原理是什么?
- 川剧变脸回脸教学视频 变脸是怎么变的?揭秘川剧变脸的原理以及方法
- 「华安解密之DDoS攻防」01 DNS原理篇“暴风”事件解密
- 排序算法:直接插入排序
- 穴位按摩减肥原理是怎样的
- HDLC&PPP原理与配置
- 爱这茶语,德国花果茶养生原理
- 帧中继原理与配置
- 一文网罗分布式架构原理和方法
