我想用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);
它似乎工作,但如果我更改块大小,我得到不同的哈希结果。这里出了什么问题?
迎接
答案 0 :(得分: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
。
比较优先于分配。添加另一组paranthesis将解决您的问题。见http://en.wikipedia.org/wiki/Order_of_operations#Programming_languages