MD5 Hash + Salt的密码存储方式实现
MD5算法是一种密码散列算法,MD5散列后的数据长度为128 bit,该散列算法在密码上使用得非常多。但现在已经被更安全的SHA-1代替,MD5算法产生的密码可以使用反向查询的方式从预先算出的密码MD5库中查到密码,网上的一些MD5库中大约有上亿到上百亿条密码数据。针对这种破解方式,对密码在存储过程中经过Salt,即加盐后存储的方式可以有效增加反向查询的难度。
Salt(盐值)是一组随机数据,长度为几个字节,比较安全的密码存储算法要求盐值至少在8 Bytes以上。盐值的产生要求使用安全的随机数算法,例如Java中使用SecureRandom算法产生的随机数就是安全的随机数算法。
MD5 Hash + Salt存储密码的过程如下:
- 产生Salt值,即使用安全随机数算法,产生随即盐值,最好直接产生随机Byte,安全的密码要求盐值在8 Bytes以上。
- 将用户密码的Bytes与盐值的Bytes组合在一起,形成Password + Salt或Salt + Password的Bytes数组。Password和Salt顺序任意,但解密时也要相同顺序。
- 对上述Password + Salt计算MD5值,得到MD5的Bytes
- 见Salt与上述算出的MD5 Bytes组合在一起,成为 Salt + MD5 Bytes
- 使用Base 64算法或转为16进制字符串的方式将上述组合后的Bytes转换成为字符串,转换之后即可存储到数据库中。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: MD5 升级优化 加盐(Java)
- 下一篇: MD5加密算法(salt盐加密)