ファイル
testfile
と文字列がありますteststring
。私が書いたシェルで:
echo "a" > testfile
次に、filecontent 出力
xxd testfile
の 16 進値を確認できます。0000000: 610a a.
私のコードを見てください:
int file; struct stat s; unsigned long size; char* buffer; char md5[MD5_DIGEST_LENGTH] file = open("testfile", O_RDONLY); if (file < 0) return false; if (fstat(file, &s) < 0) { close(file); return false; } size = s.st_size; //GET FILE SIZE printf("filesize: %lu\n", size); //PRINT FILESIZE FOR DEBUGGING buffer = (char*)mmap(0, size, PROT_READ, MAP_SHARED, file, 0); //MAP FILE CONTENT TO BUFFER MD5((unsigned char*)buffer, size, md5); //GENERATE MD5 munmap(buffer, size); //UNMAP BUFFER close(file); for (int i = 0; i < MD5_DIGEST_LENGTH; i++) printf("%02x", md5[i]); printf("\n"); unsigned char* teststring = "\x61\x0a"; //SAME STRING AS IN THE FILE MD5((unsigned char*)teststring, 2, md5); for (int i = 0; i < MD5_DIGEST_LENGTH; i++) printf("%02x", md5[i]); printf("\n");
それは印刷します:
filesize: 2 60b725f10c9c85c70d97880dfe8191b3 e29311f6f1bf1af907f9ef9f44b8328b
2 つの完全に異なるmd5 ハッシュ。をファイルに
書き込んでみましたが、ファイル に書き込んでも同じです! どうして?と同じで はありませんか?buffer
teststring
buffer
teststring
質問する
1819 次
1 に答える
2
正しいハッシュは最初のハッシュ60b725f10c9c85c70d97880dfe8191b3
.
$ echo "a" | md5
60b725f10c9c85c70d97880dfe8191b3
2 番目のハッシュは、"\x64\x0a" のハッシュ、または改行が続く文字 'd' です。
$ echo "d" | md5
e29311f6f1bf1af907f9ef9f44b8328b
投稿したコードがコンパイル/実行しているものであると確信していますか? 再コンパイルするのを忘れましたか?古いバイナリを実行していますか?
于 2013-04-11T09:22:42.523 に答える