MD5 Hash + Salt的密码存储方式实现
2015-05-25 11:38
288 查看
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转换成为字符串,转换之后即可存储到数据库中。
上述Hash + Salt的密码存储方式是比较有效的对抗从MD5库中查询到密码的方式,在大型系统使用较多。如果需要在更加安全的场合使用,可以将MD5算法更改为SHA-1算法,增加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转换成为字符串,转换之后即可存储到数据库中。
上述Hash + Salt的密码存储方式是比较有效的对抗从MD5库中查询到密码的方式,在大型系统使用较多。如果需要在更加安全的场合使用,可以将MD5算法更改为SHA-1算法,增加Salt值的长度等方式。
相关文章推荐
- Web安全--使用Salt + Hash将密码加密后再存储进数据库
- 如何安全的存储密码 - hash、salt 以及更多
- [asp,net]基于PBKDF2的hash密码存储实现
- 【Flask】Flask实现密码存储安全性的两种方式
- 使用 Salt + Hash 将密码加密后再存储进数据库
- 需求:实现数据库密码通过密文的方式存储在配置文件中
- 使用 Salt + Hash 将密码加密后再存储进数据库
- .NET实现Salt+Hash密码加密
- Hash和Salt Umbraco 默认的password存储方式
- 使用 Salt + Hash 将密码加密后再存储进数据库
- MD5 加密解密 判断密码是否相等 全套实现方式
- Android四种存储方式 sharedpreference,file,SQlite,contentprovider实现增删改查
- 利用h5的本地存储实现登录页面里的记住账号和密码功能
- Android四种存储方式 sharedpreference,file,SQlite,contentprovider实现增删改查
- Domino9下通过代理实现WEB方式重置Internet密码
- Android四种存储方式 sharedpreference,file,SQlite,contentprovider实现增删改查
- 用MD5实现hash长度扩展攻击 By Assassin
- Android四种存储方式 sharedpreference,file,SQlite,contentprovider实现增删改查
- Android数据存储实现的5大方式
- html本地存储方式实现的五线谱在线识谱练习应用