【发布时间】:2021-06-13 22:17:15
【问题描述】:
首先感谢您阅读我的问题。
我正在尝试重现我在 python 中收到的内容。所以基本上我有两个数字,我试图用它们做一个哈希。但是对于 crypto++ 库,我有点困惑。
基本上我不知道如何使用更新和计算部分。
我的codes 是
vHash(uint8_t *X,uint8_t *Y)
{
CryptoPP::SHA256 hash;
byte digest[ CryptoPP::SHA256::DIGESTSIZE ];
hash.CalculateDigest( digest, (byte*) X, 32 );
hash.CalculateDigest( digest, (byte*) y, 32 );
CryptoPP::HexEncoder encoder;
std::string output;
encoder.Attach( new CryptoPP::StringSink( output ) );
encoder.Put( digest, sizeof(digest) );
encoder.MessageEnd();
std::cout << output << std::endl;
}
从主函数我正在传递
std::string expTA = "67950298974562277680845951570422977358023181305748156081323854942335052287978";
std::string expTB = "43115149028018416730354385099369257625840461867770683759285196743048111210215";
HexDecoder decoder;
decoder.Put((byte*)&exp1[0], expTA.size());
decoder.MessageEnd();
Integer testA;
testA.Decode(decoder, decoder.MaxRetrievable());
HexDecoder decoder1;
decoder1.Put((byte*)&exp1[0], expTB.size());
decoder1.MessageEnd();
Integer testB;
testB.Decode(decoder1, decoder1.MaxRetrievable());
vHash((uint8_t *)&(testA),(uint8_t *)&(testB));
【问题讨论】:
-
您的输入非常不同,在 python 中,您将大数字转换为大端字节,在 c++ 中,您有该数字的 ascii 表示
-
不,我认为来自 pycrypto++ 的 Integer 可以解决这个问题。因为我在 python 和 c++ 中使用了其他东西。它按预期工作。如果我的假设是错误的,请告诉我这样做的正确方式是什么。谢谢
-
啊,我没有发现您正在执行转换,您使用的是
HexDecoder但您的字符串不是十六进制的,我怀疑只需将testA和testB转换为指针就可以了你想要什么 -
看起来将您的字符串直接传递给
Integer会起作用:cryptopp.com/docs/ref/… -
谢谢你,因为我提到了这不是问题。我相信问题出在 vHash 函数内部,因为它应该以正确的方式计算 sha256,但找不到任何关于它的示例,哈哈。