Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对RIPEMD160消息摘要执行SHA256哈希_C++_Hash_Openssl_Cryptography_Libcrypto - Fatal编程技术网

C++ 对RIPEMD160消息摘要执行SHA256哈希

C++ 对RIPEMD160消息摘要执行SHA256哈希,c++,hash,openssl,cryptography,libcrypto,C++,Hash,Openssl,Cryptography,Libcrypto,我正在尝试对RIPEMD 160哈希的消息摘要执行SHA256哈希。我正在Mac平台上使用OpenSSL库。 我遇到的问题是,获取RIPEMD 160的消息摘要,然后对其执行另一个SHA256哈希的中间过程。到目前为止,我只能对字符串执行1)SHA256哈希,2)对字符串执行RIPEMD160哈希。我需要在以前的SHA256消息摘要上执行RIPEMD160哈希,然后在RIPEMD160摘要上执行第二个SHA256哈希 SHA256摘要->RIPEMD160哈希函数->RIPEMD160摘要->第

我正在尝试对RIPEMD 160哈希的消息摘要执行SHA256哈希。我正在Mac平台上使用OpenSSL库。 我遇到的问题是,获取RIPEMD 160的消息摘要,然后对其执行另一个SHA256哈希的中间过程。到目前为止,我只能对字符串执行1)SHA256哈希,2)对字符串执行RIPEMD160哈希。我需要在以前的SHA256消息摘要上执行RIPEMD160哈希,然后在RIPEMD160摘要上执行第二个SHA256哈希

SHA256摘要->RIPEMD160哈希函数->RIPEMD160摘要->第二个SHA256哈希函数。我希望这有道理

仅对字符串执行SHA256哈希函数的代码
字符串sha256(常量字符串str)
{
无符号字符哈希[SHA256_摘要_长度];
SHA256_CTX SHA256;
SHA256_Init(&SHA256);
SHA256_更新(&SHA256,str.c_str(),str.size());
SHA256_Final(散列和SHA256);
细流ss;
对于(int i=0;i
SHA256不操作字符串。SHA256操作字节。不幸的是,在C中,它们通常是相同的数据类型

一旦你离开了凯撒和维格纳,密码学对字符串就不起作用了。记住这一点非常重要


假设您的输入数据是一个文本字符串,并且它当前以预期的编码(US-ASCII/ISO-8859-1/UTF-8)表示,那么在更正一些错误指针后,您的代码就可以了:

unsigned char digest[RIPEMD160_DIGEST_LENGTH];
...
RIPEMD160((unsigned char*)string, strlen(string), (unsigned char*)digest);
现在,
digest
包含了您的RIPEMD160摘要。我们记得密码术只对字节进行操作,而这个摘要就是字节,我们得到

unsigned char hash[SHA256_DIGEST_LENGTH];

SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, digest, RIPEMD160_DIGEST_LENGTH);
SHA256_Final(hash, &sha256);
或者加速器版本,就像您使用RIPEMD160时所做的:

unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256(digest, RIPEMD160_DIGEST_LENGTH, hash);

那么这里的问题是什么呢?您好@mnistic,我想问的基本上是……我如何对SHA256消息摘要执行RIPEMD160哈希,然后使用OpenSSL对结果执行另一个SHA256哈希?非常感谢您的帮助
unsigned char hash[SHA256_DIGEST_LENGTH];

SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, digest, RIPEMD160_DIGEST_LENGTH);
SHA256_Final(hash, &sha256);
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256(digest, RIPEMD160_DIGEST_LENGTH, hash);