1

我正在使用 BCrypt 的 Java 实现,我想测试一个字符串是否已经用 BCrypt 散列。有可能吗?

我什么也找不到。它会像这样工作

if (!BCrypt.hasBeenHashed(myString)) {
    return BCrypt.hashpw(myString, salt);
}

// BCrypt.hasBeenHashed("my-new-password") > FALSE
// BCrypt.hasBeenHashed("$fdshjkfhdsfhdjkshfjdhfjd") > TRUE

这个想法是我有一个自动方法,可以在创建时散列一些字符串。当我更新对象时,我希望它只散列“新值”。

谢谢。

4

1 回答 1

0

如果使用相同的算法,您可以读取所有哈希的长度完全相同。22 或 32 或 53 取决于您的实施。如果在 Java 53 中使用。为了使这更可靠,您还可以检测到第一个字符是 $ 并且整个字符串应该是 53 个字符。位置 3 和 6 也包含 $。还有其他因素可以检查,例如工作因素是否相同。这由位置 1 和 2 表示,所有这些的组合以及确保用户不会输入类似内容的验证。如果这不可行,则创建一个实例布尔值,当密码被散列时设置为 true,但要求每个密码都是它自己的对象。

于 2015-09-17T14:04:59.600 回答