相同的内容,不同的MD5-文件和字符串
Same content, different MD5 - File and String
-
我有一个文件
testfile
和一个字符串teststring
。 -
我在一个壳里写道:
echo "a" > testfile
-
则
xxd testfile
这样我就可以看到我的文件内容的十六进制值
输出: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: %lun", 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 = "x61x0a"; //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
两个完全不同的md5散列
我尝试将buffer
写入文件
以及将teststring
写入文件,它们是相同的
为什么buffer
和teststring
不一样吗?
正确的哈希是您的第一个哈希60b725f10c9c85c70d97880dfe8191b3
。
$ echo "a" | md5
60b725f10c9c85c70d97880dfe8191b3
您的第二个哈希恰好是"\x64\x0a"的哈希,或者字符"d"后跟换行符:
$ echo "d" | md5
e29311f6f1bf1af907f9ef9f44b8328b
你确定你发布的代码是你正在编译/运行的吗?你忘了重新编译了吗?你在执行一个旧的二进制文件吗?
相关文章:
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 有没有办法从非C/C++文件中读取C++原始字符串文字的内容
- 如何打开并写入一个名称取自C++中字符串的文件
- 如何从二进制文件中读取字符串
- 如何在 c++ 中使用 getline 从文件中读取字符串?
- 将字符串与文件上的数据进行比较
- 用户输入字符串的文件附加问题..C++
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 如何使字符串出现在编译的二进制可执行文件的开头?
- 使用文件内容作为硬编码字符串
- 将文件复制到自定义位置,存在字符串转换问题
- 在 c++ 中连接字符串和整数,以便在 C++ 11 不支持计算机的情况下读取多个文件
- 声明要在 qml 和 cpp 文件中使用的全局字符串
- C 通过char读取文件字符串的文件char;崩溃
- 我不明白如何将 toupper 和 isalpha 与.txt文件字符串输入一起使用
- 在 CPP 文件中使用 make 文件字符串变量
- 编译 PyGAMMA Mac Lion:g++ 找不到标准的 C++ 头文件(字符串/iostream..)
- 如何在c++中使用文件字符串作为命令
- 使用 TinyXML 解析 XML 文件字符串
- 递归下降解析器帮助(不读取文本文件字符串)