使用char []的推荐方法在Java中哈希密码?

时间:2016-12-28 00:50:59

标签: java security hash bcrypt

所以,我已经对Java密码哈希进行了一些挖掘,基本上发现像MD5这样的常用算法(不使用这个算法),SHA1SHA-256都不是如此安全,因为它们太快了。我已经看到了对BCrypt等外部实现的大量支持。

我非常喜欢使用BCrypt的想法,但它有点挫败了目的。我们大多数人现在可能知道char[] getPassword() JPasswordField方法更安全,因为它会阻止String返回的getText()被抛入JVM字符串池如果系统受到内存攻击,可能会暴露出来。

但是Java的BCrypt实现(以及可能还有其他平台)使用了Strings,这违背了使用char[]的全部目的。

那么,除了自己重做原始的BCrypt代码之外,有没有人为此问题提供推荐的解决方法?我不是安全专家,我宁愿不要使用我不熟悉的加密算法。

或者,正在使用带有BCrypt的字符串,因为这种攻击的几率开始时相对较小?

或者,是否有另一个类似于BCrypt的推荐库,它为char数组提供支持?我愿意接受建议。

我写的程序必须与远程计算机上的数据库通信,因此密码必须通过网络发送。

1 个答案:

答案 0 :(得分:0)

您可以像这样使用Password4j

char[] password = ...;
SecureString secure = new SecureString(password);

Password4j.hash(secure).withBCrypt();
secure.clear();

您可以找到有关SecureString s here的更多信息。