【问题标题】:Unexpected keccak output意外的 keccak 输出
【发布时间】: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),所以它应该是相当合理的。

标签: java keccak


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2020-02-21
    • 2012-05-06
    • 2019-03-21
    • 2019-08-29
    • 2012-11-05
    • 2021-06-14
    相关资源
    最近更新 更多