0

从纯文本密码开始并应用 BCrypt 算法,我如何测试它是否经过哈希处理以执行 Java 单元测试?

4

1 回答 1

1

使用对加密散列函数“属性”的非常松散的解释,如果您只有散列值,您将无法确定使用哪种散列函数来生成它。

对于密码和 MAC,甚至还有一个特殊的“不可区分性”属性,可以用相同的方式大致解释。更严格地说,它表示,给定两个输入值,一个密码和一个输出值,您无法识别输出对应于第一个输入还是第二个输入。

检查特定密码功能是否正确实现,或特定代码是否使用特定密码功能的方法之一是具有一个测试向量,其中每个项目完全描述所有输入数据和预期输出。

将所有这些应用到您的用例中:使用受信任的 bcrypt 实现以 {input, bcrypt(input)} 的形式准备一个项目向量。创建一个测试,将输入提交到您的系统并检查输出是否等于预期值。

如果测试失败,您将知道被测系统使用的 bcrypt 实现已损坏,或者被测系统根本不使用 bcrypt(使用其他哈希函数而不是 bcrypt)。

如果测试通过,您将知道被测系统至少为您的测试向量中的值使用了正确的 bcrypt。

于 2014-03-25T17:36:45.673 回答