我正在试验 Java 的各种Keccak实现。 到目前为止,这个实现是最有希望的,但是我得到了奇怪的结果。测试用例在这里定义(尽管我直接使用十六进制字符串,根据测试向量)。当前(和正确的)测试向量在此处以绿色定义(为了方便起见,我提供了链接,以使任何人不必从网站下载官方测试向量 zip 文件)。
对于初学者,我不了解测试向量中“len”和“msg”字段之间的相关性。'Len' 应该是 'msg' 的长度,以位为单位。例如,'len' = 5,'msg' = "48"(一个十六进制字符串),我认为 2 个十六进制数字 = 1 个字节,这 = 8 位。我错过了什么?
我只得到以下长度的输入的正确摘要(根据测试向量):16、24、40、56、64、72、112 和 128(其中长度对应于测试向量,输入是'msg')。但是,我得到的长度值:32、48、80、88、96、104 与测试向量不匹配。任何人都可以对为什么会发生这种情况做出有根据的猜测吗?当然,如果有人可以推荐 Java 中的不同实现,我将不胜感激。