1

我想用 openssl 生成文件的哈希值。

CFile file;
CFileException fileException;
file.open(filename, CFile::modeRead, &fileException);
file.SeekToBegin();
unsigned char buffer[1024];
SHA_CTX context;
SHA1_Init(&context);
while(unsigned int bytesRead = file.Read(buffer, sizeof(buffer)) > 0)
{
    SHA1_Update(&context, buffer, bytesRead);
}
unsigned char hash[SHA_DIGEST_LENGTH];
SHA1_Final(hash, &context);

它似乎有效,但如果我更改块大小,我会在哈希中得到不同的结果。这里出了什么问题?

问候

4

1 回答 1

2

这是问题所在:

while(unsigned int bytesRead = file.Read(buffer, sizeof(buffer)) > 0)

这可以作为:

bytesRead = ( file.Read(buffer, sizeof(buffer)) > 0 )

并不是

(bytesRead = file.Read(buffer, sizeof(buffer))) > 0.

比较的优先级高于分配。添加另一组括号将解决您的问题。请参阅http://en.wikipedia.org/wiki/Order_of_operations#Programming_languages

于 2012-08-19T16:19:17.613 回答