【发布时间】:2023-02-05 04:05:21
【问题描述】:
我以前从未使用过 SHA256。最近,我一直在尝试实现 SHA256 校验和,以查看库是否已被篡改。
有趣的是,OpenSSL SHA256 根据其位置为完全相同的库生成不同的总和。如果它位于另一个文件夹中,则总和不同。
无论文件位于何处,我都可以做些什么来获得相同的总和?我提供了代码 sn-ps 和我得到的总和。
unsigned char* getsum( char* filename ) {
std::ifstream pFile( filename, std::ios::binary );
SHA256_CTX sContext;
char pBuffer[ 1024*16 ];
unsigned char pSum[SHA256_DIGEST_LENGTH];
SHA256_Init( &sContext );
while( pFile.good() ) {
pFile.read( pBuffer, sizeof(pBuffer) );
SHA256_Update( &sContext, pBuffer, pFile.gcount() );
}
SHA256_Final( pSum, &sContext );
return pSum;
}
...
char* cl_sum = new char[256];
sprintf( cl_sum, "%02x", getsum("library.dll") );
MessageBoxA( NULL, cl_sum , NULL, NULL );
delete[] cl_sum;
exit( -1 );
我还尝试使用 SHA256() 函数而不是整个 SHA256 上下文、SHA256_Init()、Update & Final thing,但结果仍然相同。
【问题讨论】:
-
这看起来很可疑:
while( pFile.good() ) -
这是错误的:
sprintf( cl_sum, "%02x", getsum("library.dll") );编译器应该对此发出警告。
标签: c++