我正在尝试java的各种Keccak实现。到目前为止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的不同实现,我将不胜感激。
答案 0 :(得分:1)
在此处查看示例: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);
}