【问题标题】:OPENSSL Convert binary bytes to SHA256 C++OPENSSL 将二进制字节转换为 SHA256 C++
【发布时间】:2018-11-02 12:52:38
【问题描述】:

我基本上是在尝试为我的助记词获取校验和。 我有二进制字节,想将它们转换为 sha256 以获取前 4 位并验证它。

我花了大约 2 天的时间才意识到散列从文本字符串到 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();
}

我是 openssl 新手,无法在线找到任何解决方案。 如果有人可以调整我的函数以正确散列输入的二进制字节,我将不胜感激。 谢谢。

为了澄清,这里有一个例子: 101111100110010101011101110011110101000111110110101100011101011110111101110001011010011000111101000101000111010000100101011100

这用作文本给了我这个哈希: 2d7ffa3c8f9c3fc043045f2564101eabf80bcdb983d1d560b6b93f52ea824942

并用作字节给我这个正确的哈希: 5e5c92432e692f803539715bb624cd2e35b5b491c6bc67aee87ae82600dedf12

我用这个网站哈希:https://cryptii.com/hash-function

【问题讨论】:

  • “我花了大约 2 天的时间才意识到,从文本字符串到 sha256 的哈希值不同于从字节到 sha256 的哈希值。”你的意思是?散列总是对字节进行散列,它对文本一无所知。
  • 我可能是错的,但是如果你添加相同的二进制字符串作为文本,并且作为字节你会得到不同的结果:cryptii.com/hash-function
  • 不清楚你在问什么 - 请澄清
  • 10111110011001010101110111001111010100011111011010110001110101111011110111000101101001100011110100010100011101000011011011100000此用作文本给我此散列:2d7ffa3c8f9c3fc043045f2564101eabf80bcdb983d1d560b6b93f52ea824942并用作字节给我这个正确哈希:5e5c92432e692f803539715bb624cd2e35b5b491c6bc67aee87ae82600dedf12 跨度>
  • @CsgoTalksCom 请不要在 cmets 中添加详细信息,而是添加/澄清您的原始帖子。

标签: c++ openssl checksum sha256


【解决方案1】:

因此,您似乎需要将输入解释为比特流。将它们分组为字节,然后就可以了:

unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256_CTX sha256;
SHA256_Init(&sha256);
uint8_t str[] = { 0b10111110, 0b01100101, 0b01011101, 0b11001111, 0b01010001, 0b11110110, 0b10110001, 0b11010111, 0b10111101, 0b11000101, 0b10100110, 0b00111101, 0b00010100, 0b01110100, 0b00110110, 0b11100000 };
SHA256_Update(&sha256, str, sizeof(str));
SHA256_Final(hash, &sha256);

哈希输出:

5e5c92432e692f803539715bb624cd2e35b5b491c6bc67aee87ae82600dedf12

Live demo

【讨论】:

  • 知道如何将字符串向量放入 uint8_t 吗?
  • 什么向量?这本身可能是一个全新的问题。
  • 现在我有一个字符串向量中的位流:0b10111110, 0b01100101, 0b01011101.. 是否可以将它们放入 uint8?遗憾的是,这很可能是另一个问题/问题。
猜你喜欢
  • 1970-01-01
  • 2017-11-22
  • 2013-03-06
  • 1970-01-01
  • 2012-03-14
  • 2021-12-05
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多