Дайджест SHA256 отличается между инициализатором массива и строкой - PullRequest
1 голос
/ 08 марта 2019

Я использую функцию sha256 микросхемы безопасности ATECC508A Microchip. Мой код выглядит так:

int main(void) {
    uint8_t message[32] = {0}; // Method 1
    //uint8_t message[32] = "00000000000000000000000000000000"; // Method 2
    foobar(message, sizeof(message));
}

void foobar(uint8_t *message, int length) {
    uint8_t digest[32];
    sha256(message, length, digest);
    // printf statements for calculated hashes ...
}

Метод 1: 66687AADF862BD776C8FC18B8E9F8E20089714856EE233B3902A591D0D5F2925

Метод 2: 84E0C0EAFAA95A34C293F278AC52E45CE537BAB5E752A00E6959A13AE103B65A

Метод 2 доставляет соответствующий хеш, который я ожидаю для 32 нулей, но когда я использую инициализатор статического массива в методе 1, хэш неверен, и я не знаю почему. Я проверил полученные хеши sha256 здесь .

Буду признателен за любую помощь, большое спасибо.

EDIT:

Мне удалось инициализировать весь массив символами нулей с помощью:

uint8_t message[32] = { [0 ... 31] = '0'}.

Это работает только на компиляторах gcc.

1 Ответ

6 голосов
/ 08 марта 2019

Во втором случае массив не заполняется числом 0, а заполняется символом '0'.

В ASCII кодировка '0' равна 48, поэтому, если ваша система использует ASCII, то каждый элемент вашего массива имеет значение 48.

...