SHA中的SHA256实现

时间:2014-04-05 12:02:36

标签: c sha256

我正在尝试从这个网站编写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

这是我在这里做错的测试代码还是别的什么?

2 个答案:

答案 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);
相关问题