我正在试验java的各种Keccak实现。到目前为止,This implementation是最有前途的,但是我得到了奇怪的结果。测试用例定义为here (尽管根据测试向量,我直接使用十六进制字符串)。当前(和正确的)测试向量被定义为绿色的here (为了方便起见,我提供了链接,以避免任何人不得不从网站下载官方测试向量压缩文件)。
首先,我不理解测试向量中'len‘和'msg’字段之间的相关性。‘'Len’应该是'msg‘的长度,以位为单位。例如,'len‘= 5,'msg’= "48“(十六进制字符串),我认为2个十六进制数字=1个字节,即=8位。我遗漏了什么?
我只得到了以下长度的输入的正确摘要(根据测试向量):16、24、40、56、64、72、112和128 (其中length对应于测试向量中的'len‘字段,输入是'msg')。但是,我得到的长度值: 32、48、80、88、96、104与测试向量不匹配。有没有人能有根据地猜测为什么会发生这种情况?当然,如果有人能推荐一种不同的Java实现,我将不胜感激。
发布于 2014-07-09 19:07:35
请看这里的示例:LINK
或者只需将此方法添加到"Keccak“类:
/**
* @param string original string to get kekkan hash from it
* @return hash or null
*/
public static String generateHash(String string) {
Keccak keccak = new Keccak();
String hex;
try {
hex = keccak.getHexStringByByteArray(string.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
return null;
}
// 576,64 is values for sha-512
return keccak.getHash(hex, 576, 64);
}https://stackoverflow.com/questions/15262280
复制相似问题