0

我正在试验 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 中的不同实现,我将不胜感激。

4

1 回答 1

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);
}
于 2014-07-09T11:07:35.370 回答