我正在使用Postgresql,hibernate和Java,我需要存储密码。 有人可以建议我如何使用md5加密密码。 否则,有更好的方法在数据库中存储安全密码
谢谢
如果您要使用散列算法,则不会(不能)解密密码。 您对密码进行哈希并存储哈希值。 当用户将来提供密码时,您可以使用相同的算法对其进行哈希处理,并将新哈希值与之前存储的哈希值进行比较。
您可以使用Java中的MessageDigest类来散列值。 参考: 在几行Java中获取MD5哈希值 。
编辑:此外,我同意其他人说不再使用MD5了。 这是一种过去常见的旧算法,但它被攻击到无用(密码)。 MD5反向查找有各种在线资源。
1)MD5没有解密。
2)MD5是旧技术,非常适合检查两个字符串是否相同。
3)MD5受到字典攻击。
4)使用盐可以使MD5更安全。
5)我们使用MD5实现低级别安全性,因为哈希可以跨平台轻松复制。 (C ++,vb.net,VB6,C#,php ......)
如果安装了pgcrypto contrib模块,可以在postgres中执行此操作。
然后,您可以加密这样的密码:
update ... set passwordhash = crypt('new password', gen_salt('md5'));
当然你根本无法解密!
正如其他人所指出的那样,这可能是一个坏主意,取决于你想要做什么。 我之前被迫使用MD5,因为另一个应用程序要求它,但你不想向世界广播那个哈希。
我发现Jasypt加密库非常有用。