【发布时间】:2013-03-07 03:00:50
【问题描述】:
我正在尝试各种 Keccak 的 java 实现。 This implementation 是迄今为止最有希望的,但是我得到了奇怪的结果。测试用例定义为here(尽管根据测试向量,我直接使用十六进制字符串)。当前(和正确的)测试向量以绿色定义here(为了方便起见,我提供了链接,以免任何人不得不从网站下载官方测试向量 zip 文件)。
对于初学者,我不了解测试向量中“len”和“msg”字段之间的相关性。 'Len' 应该是 'msg' 的长度,以位为单位。例如,'len' = 5,'msg' = "48"(一个十六进制字符串),我认为 2 个十六进制数字 = 1 个字节,这 = 8 位。我错过了什么?
我只得到以下长度的输入的正确摘要(根据测试向量):16、24、40、56、64、72、112 和 128(其中长度对应于“len”测试向量中的字段,输入是'msg')。但是,我得到的长度值:32、48、80、88、96、104 与测试向量不匹配。任何人都可以对为什么会发生这种情况做出有根据的猜测吗?当然,如果有人能推荐 Java 中的不同实现,我将不胜感激。
【问题讨论】:
-
我刚刚推送了我的新Java implementation of Keccak and SHA-3 to GitHub,所以你可以试一试。我已经开发和测试(和重写)它六周了,它通过了 53,000 次单元测试(主要基于 Keccak 团队生成的 KAT),所以它应该是相当合理的。