繁体   English   中英

如何将 hash 两次字符串 C openssl

[英]How to hash twice a string C openssl

我的目标是 hash 和 sha256 一个字符串两次,但我没有很好的结果这是代码:

void double_hash(char *string, char output[65]) {
    unsigned char out[32];
    char hash[65];
    unsigned char scnd_hash[65];
    SHA256_CTX sha256;
    SHA256_Init(&sha256);
    SHA256_Update(&sha256, string, strlen(string));
    SHA256_Final(out, &sha256);
    for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) {
        sprintf(hash + (i * 2), "%02x", out[i]);
    }
    SHA256_CTX sha256_2;
    SHA256_Init(&sha256_2);
    SHA256_Update(&sha256_2, hash, strlen(hash));
    SHA256_Final(scnd_hash, &sha256_2);
    for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) {
        sprintf(output + (i * 2), "%02x", scnd_hash[i]);
    }
}

对于字符串“hello”,它会:

hello
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
d7914fe546b684688bb95f4f888a92dfc680603a75f23eb823658031fff766d9

但是我想要:

hello
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a419833d50

我试过这段代码,但没有产生好的结果:

#include <openssl/sha.h>
#include <stdio.h>
#include <string.h>

void double_hash(char *string, char output[65]) {
    unsigned char out[32];
    unsigned char scnd_hash[65];
    SHA256_CTX sha256;
    SHA256_Init(&sha256);
    SHA256_Update(&sha256, string, strlen(string));
    SHA256_Final(out, &sha256);
    SHA256_CTX sha256_2;
    SHA256_Init(&sha256_2);
    SHA256_Update(&sha256_2, out, strlen((char *)out));
    SHA256_Final(scnd_hash, &sha256_2);
    for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) {
        sprintf(output + (i * 2), "%02x", scnd_hash[i]);
    }
}

int main() {
    char outp[65];
    char *hello = "hello";
    double_hash(hello, outp);
    printf("%s", outp);
}

它产生852d59ce6fb3099c9d563870d298f0108eff079e1dde63e66c68d2e0b40353c1

谢谢

要以9595c9df9007...结束,请对 32 字节二进制数据而不是字符串执行第二个 hash。

// SHA256_Update(&sha256_2, hash, strlen(hash));
SHA256_Update(&sha256_2, out, 32);

参考: SHA256

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM