意外的keccak输出

时间:2013-03-07 03:00:51

标签: java keccak

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

1 个答案:

答案 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);
}