我尝试了一些。 Python的pyskein;我在网上找到的一个javascript绞纱计算器;并且用于xkcd的傻瓜'漫画的绞纱计算器都为给定的输入提供相同的输出。
但是当我下载参考C源here的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;
}
结果hex:2638B1711F1346D08BF02B5D1A575CD924140A608512AF5B8E4475632599A896
相同数据上相同哈希的Python代码:
import skein
print( skein.skein256(bytes([0xC1, 0xEC, 0xFD, 0xFC])).hexdigest() )
结果hex:07e785ce898fa5cfa22e15294481717935923985ea90f67fc65cb5b3cb718190
请注意,C答案是根据代码附带的KAT_MCT/ShortMsgKAT_256.txt
文件的预期答案。但是,pyskein给出了其他人似乎都同意的结果。我错过了什么?