所以,我已经对Java密码哈希进行了一些挖掘,基本上发现像MD5
这样的常用算法(不使用这个算法),SHA1
和SHA-256
都不是如此安全,因为它们太快了。我已经看到了对BCrypt等外部实现的大量支持。
我非常喜欢使用BCrypt的想法,但它有点挫败了目的。我们大多数人现在可能知道char[] getPassword()
JPasswordField
方法更安全,因为它会阻止String
返回的getText()
被抛入JVM字符串池如果系统受到内存攻击,可能会暴露出来。
但是Java的BCrypt实现(以及可能还有其他平台)使用了Strings,这违背了使用char[]
的全部目的。
那么,除了自己重做原始的BCrypt代码之外,有没有人为此问题提供推荐的解决方法?我不是安全专家,我宁愿不要使用我不熟悉的加密算法。
或者,正在使用带有BCrypt的字符串,因为这种攻击的几率开始时相对较小?
或者,是否有另一个类似于BCrypt的推荐库,它为char
数组提供支持?我愿意接受建议。
我写的程序必须与远程计算机上的数据库通信,因此密码必须通过网络发送。
答案 0 :(得分:0)
您可以像这样使用Password4j:
char[] password = ...;
SecureString secure = new SecureString(password);
Password4j.hash(secure).withBCrypt();
secure.clear();
您可以找到有关SecureString
s here的更多信息。