#c #hash #sha256
#c #хэш #sha256
Вопрос:
Я использую функцию sha256 микросхемы безопасности Microchip ATECC508A. Мой код выглядит следующим образом:
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 здесь.
Я был бы признателен за любую помощь, большое вам спасибо.
Редактировать:
Я смог инициализировать весь массив символами нулей с помощью:
uint8_t message[32] = { [0 ... 31] = '0'}
.
Это работает только в компиляторах gcc.
Комментарии:
1. Так что, возможно, он предназначен для работы с ASCII. Вы, конечно, знаете разницу между целыми числами и строками?
2. Можете ли вы вставить ссылку в свой ответ на документацию для
sha256()
функции, которую вы используете?3. @Lundin Проблема решена, это был не мой день, в любом случае спасибо.
Ответ №1:
Во втором случае массив заполняется не числом 0, а символом '0'
.
В ASCII кодировка для '0'
равна 48, поэтому, предполагая, что ваша система использует ASCII, тогда каждый элемент вашего массива имеет значение 48.
Комментарии:
1. Спасибо за ваш ответ, я новичок в программировании на c, и моя основная проблема заключалась в том, что я думал, что инициализатор массива заполнит все значения определенным значением в скобках, но это влияет только на первое, а все остальные позиции инициализируются нулем. Другой проблемой было представление ascii, спасибо!