**已关闭。**此问题不符合Stack Overflow guidelines。当前不接受答案。
这个问题似乎与help center中定义的范围内的编程无关。
2天前关闭。
Improve this question
我有一个代码在Python中做二进制哈希字符串。然而,我需要在CPP相同的函数代码。我已经安装了OpenSSL,但无法找到简单的指南,可以帮助我获得相同的结果由Python产生。
我在Python中的字符串输入= 252bf9d75c4f481ebb6278d708257d1f12bb6dd30301d26c623f789b2ba6fc0
并且Python双精度函数sha256给予散列= 9f840d5922a8f6b6ca360351449616a7423d0358c3cd2ad4af2c5de065352fe5
我在pyhton的代码是:
import hashlib
import binascii
inputs = '252bf9d75c4f481ebb6278d708257d1f12beb6dd30301d26c623f789b2ba6fc0'
unhex_ascii = binascii.unhexlify(inputs)
firstsha256 = hashlib.sha256(unhex_ascii).digest()
secondsha256 = hashlib.sha256(firstsha256).digest()
final = binascii.hexlify(secondsha256[::-1])
print(str(final, 'utf-8'))
下面的代码是我在cpp中使用的,但是和python相比,它给予了不同的答案。
在cpp中,我得到散列= 0e2b6fe2284bfa33b2922ec48dc8a4e326de4dd86759ce50350469b6f0c2c864
我的cpp代码是:
#include "SHA256.h"
#include <iostream>
using namespace std;
int main() {
unsigned char buf1[32] = { 0 }, buf2[32] = { 0 };
unsigned char ForHash[129] = "\x25\x2b\xf9\xd7\x5c\x4f\x48\x1e\xbb\x62\x78\xd7\x08\x25\x7d\x1f\x12\xbe\xb6\xdd\x30\x30\x1d\x26\xc6\x23\xf7\x89\xb2\xba\x6f\xc0";
sha256_hash(buf1, ForHash, (32));
sha256_hash(buf2, buf1, 16);
for (int i = 0; i < 32; i++) {
printf("%02x", buf2[31 - i])};
return 0;}
sha256.h是从https://github.com/dmitryelj/SHA256-Benchmark/blob/main/SHA256.CPP派生的
2条答案
按热度按时间crcmnpdw1#
不知道是怎么回事,但如果我用Python运行,我会得到
在C++中我得到了Godbolt Link
输出:
ars1skjm2#
第二次哈希时,只使用了SHA256哈希值的一半,将第二次调用
sha256_hash
改为读取所有32个字节,得到了预期的结果.Demo。