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 に答える