我正在尝试从这个网站编写SHA256实现:http://bradconte.com/sha256_c 在MSP430 MCU板上。我正在使用开源Energia IDE进行编程。
这是测试代码:
unsigned char hash[32];
SHA256_CTX ctx;
sha256_init(&ctx);
sha256_update(&ctx,(unsigned char*)"abc",3);
sha256_final(&ctx,hash);
PrintHex(hash);
这会转换为十六进制
void PrintHex(unsigned char * data)
{
char tmp[16];
for (int i=0; i<32; i++) {
sprintf(tmp, "%02x",data[i]);
Serial.print(tmp);
}
}
问题是输出始终是错误的哈希码。
这是输出:
2bb53935edbba17dc04a04854518754d8a66484491b585b0d0700cd2512f5420
这是我在这里做错的测试代码还是别的什么?
答案 0 :(得分:1)
我在我的系统上运行了该代码(Mac OS X,x86 64位),它给了我这个:
551ce4769446b343295ea7f819ba1c5557545e29a4de545746b2b246a9831f22
我认为我们可以放心地假设代码是废话:我使用一些在线工具验证了ba7816b ...是正确的哈希,现在我们看到你的平台和我的平台产生不同的结果。我在代码中注意到有关endianness的一些注释,所以我查了一下,你的系统也是little-endian,所以这不应该是一个问题。我建议你寻找不同的实现方式。
答案 1 :(得分:1)
您不应该假设字符串编码可以在C中移植。
请尝试使用此代码:
unsigned char message[] = {0x61, 0x62, 0x63};
unsigned char hash[32];
SHA256_CTX ctx;
sha256_init(&ctx);
sha256_update(&ctx,message,sizeof message);
sha256_final(&ctx,hash);
PrintHex(hash);