为什么我从不同的skein哈希API获得不同的结果?

时间:2013-04-02 15:50:16

标签: c cryptography skein

我尝试了一些。 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给出了其他人似乎都同意的结果。我错过了什么?

0 个答案:

没有答案