SHA256摘要在数组初始值设定项和字符串之间有所不同

问题描述 投票:1回答:1

我使用Microchip ATECC508A安全芯片的sha256功能。我的代码看起来像这样:

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哈希here

我非常感谢你的帮助,非常感谢。

编辑:

我能够用零字符初始化整个数组:

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

这仅适用于gcc编译器。

c hash sha256
1个回答
6
投票

在第二种情况下,数组未填充数字0,但填充了字符'0'

在ASCII中,'0'的编码为48,因此假设您的系统使用ASCII,则数组的每个元素都具有值48。

© www.soinside.com 2019 - 2024. All rights reserved.