【问题标题】:Performing a SHA256 Hash on RIPEMD160 Message Digest对 RIPEMD160 消息摘要执行 SHA256 哈希
【发布时间】:2018-12-03 22:10:42
【问题描述】:

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

SHA256 摘要-> RIPEMD160 哈希函数-> RIPEMD160 摘要-> 2nd SHA256 哈希函数。我希望这是有道理的....?

仅针对字符串的 SHA256 哈希函数代码

string sha256(const string str)
{
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, str.c_str(), str.size());
SHA256_Final(hash, &sha256);
stringstream ss;

for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
{

    ss << hex << setw(2) << setfill('0') << (int)hash[i];
}
return ss.str();

}

RIPEMD160 Hash 代码

 int main()
 {

  unsigned char digest[RIPEMD160_DIGEST_LENGTH];

  char string[] = "hello world";

  RIPEMD160((unsigned char*)&string, strlen(string), (unsigned 
  char*)&digest);

  char mdString[RIPEMD160_DIGEST_LENGTH*2+1];

     for(int i = 0; i < RIPEMD160_DIGEST_LENGTH; i++)
     sprintf(&mdString[i*2], "%02x", (unsigned int)digest[i]);

     printf("RIPEMD160 digest: %s\n", mdString);

  return 0;

}

【问题讨论】:

  • 那么这里的问题是什么?
  • 嗨@mnistic,所以我要问的本质是.....我如何对SHA256消息的摘要执行RIPEMD160哈希,然后使用OpenSSL对结果执行另一个SHA256哈希?

标签: c++ hash openssl cryptography libcrypto


【解决方案1】:

仅针对字符串的 SHA256 哈希函数代码

SHA256 不对字符串进行操作。 SHA256 对字节进行操作。不幸的是,在 C 中,它们通常是相同的数据类型。

一旦你离开了 Caesar 和 Vigenere,密码学就不再适用于字符串。记住这一点非常重要。


假设您的输入数据是一个文本字符串,并且它当前以预期的编码(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);

【讨论】:

  • 非常感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多