0
当我使用openssl命令行计算文件的sha256摘要时,它与使用openssl库生成的摘要完全不同。OpenSSL摘要:命令行和C++中的不同结果
命令行:
openssl dgst -binary -sha256 MyFile.txt
C++:
BIO* bio = BIO_new_file("MyFile.txt", "rb");
if (bio != NULL)
{
OpenSSL_add_all_digests();
const EVP_MD* md = EVP_sha256();
if (md != NULL)
{
EVP_MD_CTX* ctx = EVP_MD_CTX_create();
if (EVP_DigestInit_ex(ctx, md, NULL))
{
const int bufLength = 4096;
unsigned char buf[bufLength];
unsigned int len;
while (BIO_read(bio, buf, bufLength))
EVP_DigestUpdate(ctx, buf, bufLength);
unsigned char digest[EVP_MAX_MD_SIZE];
int ok = EVP_DigestFinal_ex(ctx, digest, &len); // ok == 1; digest in variable "digest" is totally different from the one calculated on command-line
}
EVP_MD_CTX_cleanup(ctx);
BIO_free_all(bio);
}
}
为什么摘要通过C++ calcuated完全不同的,比在命令行中计算出的一个? (MyFile.txt的没有换行符或空格),则它
亲切的问候, 马蒂亚斯
感谢,但这并没有工作=> readlen“总是” 1(当文件被读取到年底时除外) – Matthias 2014-10-28 10:32:12
我也尝试用QT(QFile.readAll)读取文件,那里的散列值也不同于命令行 – Matthias 2014-10-28 10:39:25
上计算的值。是的。你是否逐字复制了while子句?括号非常重要。当我读取我的测试文件时,它读取2次4096字节,然后是最后读取1655字节。十六进制哈希正好与命令行ssl哈希匹配。 – 2014-10-28 16:26:11