2

我试过几个。Python的pyskein;我在某处网上找到的 javascript 绞纱计算器;用于 xkcd 的愚人节漫画的绞纱计算器对于给定的输入都给出相同的输出。

但是当我在这里下载参考 C 源代码的 1.3 版时,我得到了不同的结果。最糟糕的是,我从 C API 获得的结果与源代码附带的“已知答案测试”示例完全匹配,所以我认为我使用它是正确的。

我的 C 代码:

#include <stdio.h>
#include <stdlib.h>
#include "SHA3api_ref.h"

int main(int argc, const char * argv[])
{
    const int BITS = 256; // length of hash in bits
    const int LENGTH = 32; // length of data in bits
    BitSequence *hashval = calloc(BITS/8, 1);
    const BitSequence content[] = {0xC1, 0xEC, 0xFD, 0xFC};

    Hash(BITS, content, LENGTH, hashval);

    for (int i = 0; i < BITS/8; i++) {
        printf("%02X", hashval[i]);
    }
    return 0;
}

结果十六进制:2638B1711F1346D08BF02B5D1A575CD924140A608512AF5B8E4475632599A896

相同数据上相同哈希的 Python 代码:

import skein
print( skein.skein256(bytes([0xC1, 0xEC, 0xFD, 0xFC])).hexdigest() )

结果十六进制:07e785ce898fa5cfa22e15294481717935923985ea90f67fc65cb5b3cb718190

KAT_MCT/ShortMsgKAT_256.txt请注意,根据代码随附的文件,C 答案是预期的答案。但是 pyskein 给出的结果似乎其他所有人都同意是正确的。我错过了什么?

4

0 回答 0