当前位置: 首页 > 知识库问答 >
问题:

SHA256在c中的实现

艾泉
2023-03-14

我试图从这个网站编程SHA256实现:http://bradconte.com/sha256_c在MSP430单片机板上。我正在使用开源的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个答案

勾通
2023-03-14

您不应该假设字符串编码在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);
鄂和璧
2023-03-14

我在我的系统上运行了这段代码(Mac OS X,x86 64位),它给了我这个:

551ce4769446b343295ea7f819ba1c5557545e29a4de545746b2b246a9831f22

我想我们可以安全地假设代码是垃圾:我验证了ba7816b。。。是使用一些在线工具的正确哈希,现在我们看到您的平台和我的平台都产生不同的结果。我注意到代码中有一些关于endian的注释,所以我查了一下,您的系统也是little endian,所以这应该不是问题。我建议您寻找不同的实现。

 类似资料:
  • 我编写了一个c程序,对字符数组执行sha256哈希,然后对sha256哈希函数的输出执行ripemd160哈希。 这是我的密码: } 问题就出在这一行: 无符号char*d=SHA256(raw-data, strlen(raw-data),0);当我将d指针(sha256函数的输出)传递给RIPEMD160函数时,RIPEMD160函数的哈希输出变为错误。谁能告诉我为什么会这样?以及如何纠正我的

  • (再说一遍,数据是字节数组) 但是,字节不匹配。我是不是漏掉了什么? (好吧,我当然是,否则它会起作用的,对吧?:S) -86,44,95,84,3,50,7,-119,-36,46,39,32,-120,7,10,-86,-101,110,-93,-72,-13,-93,-42,111,0,59,-85,-63,-15,-98,-17,-52 当转换为 170,44,95,84,3,50,7,1

  • 问题内容: 2019年更新:自Bouncycastle 1.60起,Bouncycastle现在支持PBKDF2-HMAC- SHA256 JAVA是否有PBKDF2-HMAC-SHA256的可靠实现? 我曾经使用bouncycastle进行加密,但是它不提供PBKDF2WithHmacSHA256’。 我不想自己写加密模块。 您能推荐任何其他库或算法吗(如果我可以坚持使用bouncycastle

  • 在这里找到了一些示例代码,但这只适用于SHA1。代码的关键位是: 我需要把这个从SHA1改成SHA256。 从Java文档和这篇文章来看,下面的内容似乎是可能的,但是C#库中的构造函数没有重载。

  • import "crypto/sha256" sha256包实现了SHA224和SHA256哈希算法,参见FIPS 180-4。 Constants func Sum256(data []byte) [Size]byte func New() hash.Hash func Sum224(data []byte) (sum224 [Size224]byte) func New224() hash.H