gpt4 book ai didi

c++ - md5 的这种实现在字符串上运行良好,但在文件上没有给出正确的结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:43:49 26 4
gpt4 key购买 nike

我正在使用用 C 编写的 md5 算法的实现。它在字符串上运行良好。但是,它会在文件上给出错误的结果。我正在使用下面的代码将文件转换为 char*,然后将其发送到 md5 函数:

    struct stat st; 

if (stat(fileName, &st) == 0)
{

// read the file into a char* in order to send it to md5 function
std::string fdata = "";
std::ifstream filePtr(fileName);
std::string dummy = "";
while((st.st_mode & 0100000) && !filePtr.eof())
{
filePtr >> dummy;
fdata += dummy;

}

if(st.st_mode & 0100000)
{
const char* fileData = fdata.c_str();
unsigned* d = md5(fileData, strlen(fileData));
WBunion u;

for (unsigned j = 0; j < 4; ++j)
{
u.w = d[j];
for (unsigned k = 0; k < 4; ++k)
{
printf("%02x",u.b[k]);
}
}
printf("\n");

}

注意:按位运算只是检查文件是否为普通文件(不是文件夹)。
我究竟做错了什么?读取文件的重载 >> 运算符是问题所在吗?

提前谢谢你,


链接到我正在使用的 md5 算法的实现:http://rosettacode.org/wiki/MD5#C.2B.2B

最佳答案

filePtr >> fdata clears fdata在循环的每次迭代中,这意味着字符串最终包含文件中的最后一个单词。将整个文件压缩成 std::string 的正确而简单的方法是 by using a stringstream .

此外,您必须以二进制模式打开文件以使 MD5 正常工作,并调用 fdata.size() 而不是 strlen(fileData) 以便处理带有 NUL 字符的文件。

关于c++ - md5 的这种实现在字符串上运行良好,但在文件上没有给出正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24536406/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com