我基本上试图为我的助记词提供校验和。 我有二进制字节,并希望将它们转换为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的新手,无法在线找到任何解决方案。 如果有人可以调整我的函数来正确地散列二进制字节输入,我会非常感激。 谢谢。
澄清这里的一个例子: 10111110011001010101110111001111010100011111011010110001110101111011110111000101101001100011110100010100011101000011011011100000
这用作文本给我这个哈希: 2d7ffa3c8f9c3fc043045f2564101eabf80bcdb983d1d560b6b93f52ea824942
并用作字节给我这个正确的哈希: 5e5c92432e692f803539715bb624cd2e35b5b491c6bc67aee87ae82600dedf12
我用这个网站哈希:https://cryptii.com/hash-function
答案 0 :(得分:0)
因此,您似乎需要将输入解释为位流。将它们分组为字节,然后离开:
network:
version: 2
ethernets:
ens18:
addresses: [195.201.52.XXX/32]
gateway4: 195.201.8.YYY
dhcp4: false
nameservers:
addresses: [213.133.98.98,213.133.99.99,213.133.100.100,8.8.8.8]
哈希输出:
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);