OpenSSL摘要:命令行和c++; 当我用OpenSSL命令行计算文件的Sa256摘要时,它完全不同于C++中使用OpenSSL库生成的摘要。
命令行:OpenSSL摘要:命令行和c++; 当我用OpenSSL命令行计算文件的Sa256摘要时,它完全不同于C++中使用OpenSSL库生成的摘要。,c++,command-line,openssl,digest,C++,Command Line,Openssl,Digest,命令行: openssl dgst -binary -sha256 MyFile.txt c++: 为什么通过C++的摘要与在命令行上计算的摘要完全不同?(MyFile.txt中没有换行符或空格) 亲切问候,, 马蒂亚斯你把读数搞错了。使用此codechange,哈希值是正确的: int readlen; while ( (readlen = BIO_read(bio, buf, bufLength)) > 0)
openssl dgst -binary -sha256 MyFile.txt
c++:
为什么通过C++的摘要与在命令行上计算的摘要完全不同?(MyFile.txt中没有换行符或空格)
亲切问候,,
马蒂亚斯你把读数搞错了。使用此codechange,哈希值是正确的:
int readlen;
while ( (readlen = BIO_read(bio, buf, bufLength)) > 0)
{
EVP_DigestUpdate(ctx, buf, readlen);
}
通常,您应该有更多的错误处理,以使代码更健壮
干杯
/Erik Alapä谢谢你的回答,但这不起作用=>readlen是“始终”1(除非文件读到最后)我也尝试过用QT(QFile.readAll)读取文件,在那里散列也不同于在命令行上计算的散列。是的,它起作用了。你把while从句一字不差地抄了吗?括号很重要。当我读取测试文件时,它读取4096字节2次,最后一次读取1655字节。十六进制散列与命令行ssl散列完全匹配。谢谢,当将二进制散列转换为十六进制时,它们是相同的
int readlen;
while ( (readlen = BIO_read(bio, buf, bufLength)) > 0)
{
EVP_DigestUpdate(ctx, buf, readlen);
}