Почему я получаю разные результаты от разных API хеш-кодов?

Я попробовал несколько. Пискейн из питона; калькулятор на скрипке javascript, который я где-то нашел в Интернете; и калькулятор пасмажа, используемый для комиксов дурака xkcd, выдает одинаковый результат для данного ввода.

Но когда я загружаю версию 1.3 справочного источника C здесь, я получаю другие результаты. Хуже всего то, что результаты, которые я получаю от 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() )

результат hex: 07e785ce898fa5cfa22e15294481717935923985ea90f67fc65cb5b3cb718190

Обратите внимание, что ответ C является ожидаемым ответом в соответствии с KAT_MCT/ShortMsgKAT_256.txt файл, который поставляется с кодом. Но pyskein дает результаты, которые, похоже, все остальные согласны с тем, что они верны. Что мне не хватает?

0 ответов

Другие вопросы по тегам