如何对一个非确定性加密函数进行单元测试?

4
我正在尝试从 JavaScript 重新实现一个非确定性加密函数到 Java。但我发现每次运行该函数时输出都不同,然而无论何时我解密输出,它总是返回原始文本。
例如:
单词:hello 加密后:?HX?631ffe50353ddda632a7e8fa11136d6ffaa584eb43b34c96005b6256f9dc 4121c7a8545d79887b900672e5870d702441?H 解密后:hello 单词:hello 加密后:?HX?dfea4d1d30ebd5fc871c7c92d0230baf9e5298b19c3cfa0770fe2d2035f8 dad0116f2963b115c85c9d4725be505fca54?H 解密后:hello 等等……
为了进行单元测试,我可以想到一种方法,即在 Java 中实现解密功能,然后对加密函数的输出进行解密。如果解密能够还原原始文本,则说明加密正确。
例如:
encrypted = Encrypt_text(word);
assertEquals(word,Decrypt_text(encrypted);

还有其他建议吗...?

2个回答

2
最好使用原始的解密函数来验证加密函数,而不是新的解密例程。如果您编写并使用它们来相互测试,您将已经验证了数据正确地往返传输,但您将没有验证中间结果。
您可以使用Mozilla Rhino来运行Javascript解密例程:http://www.mozilla.org/rhino/

哦,一个 Java 的 JavaScript 实现!听起来很有趣。我会去查一下的。+1 - Jeune

1
如果您对加密形式不感兴趣,那么断言就非常完美。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接