我编写了 ac 程序对 char 数组执行 sha256 哈希,然后对 sha256 哈希函数的输出执行成熟的 160 哈希。
这是我的代码:
#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>
#include <openssl/ripemd.h>
int main(){
int c;
const unsigned char* rawdata = "046EAF0968AA895ADDFEE599566F0B880242461D1377F4887C9B84631E13067B96DB18C41E0C208F8D12EBCC3F99F2522903AF6105833E4CBADE9D6A1D0F039187";
unsigned long n = strlen(rawdata);
unsigned char *d = SHA256(rawdata, strlen(rawdata), 0);
for (c = 0; c < 32; c++){
printf("%02x", d[c]);
}
putchar('\n');
unsigned char md[32];
unsigned char* pmd = RIPEMD160(d, strlen(d), md);
int i;
for (i = 0; i < 20; i++)
printf("%02x", pmd[i]);
putchar('\n');
return 0;
}
问题出在这一行:
无符号字符 *d = SHA256(原始数据,strlen(原始数据),0);当我将作为 sha256 函数输出的 d 指针传递给 RIPEMD160 函数时,RIPEMD160 函数的结果哈希输出变得错误。谁能告诉我为什么会这样?以及如何更正我的代码以在 char 数组中打印和存储我的ripems160 哈希?
这是我尝试过的:
字符串“046EAF0968AA895ADDFEE599566F0B880242461D1377F4887C9B84631E13067B96DB18C41E0C208F8D12EBCC3F99F2522903AF6105833E4CBADE9D6A1D0F039187”的哈希输出
是:37a0df85d5ccf7cb5f92b53aa3f223d76c115a844ed52d8978deecd2ecb3e406
哪个是对的。
但是“37a0df85d5ccf7cb5f92b53aa3f223d76c115a844ed52d8978deecd2ecb3e406”的成熟度160哈希应该是
“4ecc9d3eea56b0af96b6db612b76911858dcb40d”但我错了。
这是使用此命令编译时我的代码的输出
“gcc sha256.c -lssl -lcrypto -Wno-deprecated-declarations”
输出:
37a0df85d5ccf7cb5f92b53aa3f223d76c115a844ed52d8978deecd2ecb3e406 63bb23be08e2c097008c4c272cc56c14e5656831
第二个字符串“63bb23be08e2c097008c4c272cc56c14e5656831”是ripemd160哈希,这是错误的