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