• 6615阅读
  • 3回复

QCryptographicHash类读取文字和图片,居然MD5相同 [复制链接]

上一主题 下一主题
离线zzh
 

只看楼主 倒序阅读 楼主  发表于: 2009-11-23
如题,程序读取一个文本文件和一个图片,得到MD5是相同的。
代码片段:
{

QString a,b,e,e1;
QByteArray c,c1,d,d1;
QCryptographicHash md(QCryptographicHash::Md5);

QFile wenjian("11.txt");
if(wenjian.open(QIODevice::ReadOnly))
    {
         QDataStream in(&wenjian);
             in >> a;
     }
     c.append(a);
     md.addData(c);
     c1 = md.result();
      e.append(c1.toHex());
      b1->setText(e); //在QLabel上显示输出
      md.reset();
QFile wenjian1("P8080018.jpg");
if(wenjian1.open(QIODevice::ReadOnly))
    {
         QDataStream in1(&wenjian);
             in1 >> b;
    }

d.append(b);
md.addData(d);
d1 = md.result();
e1.append(d1.toHex());

b2->setText(e1);  //在QLabel上显示输出
}

不知该怎么办啊,谢谢大家了。
离线dbzhang800

只看该作者 1楼 发表于: 2009-11-23
1.  建议多看看manual,至少你用的类要清楚,
比如你直接
QDataStream & operator>> ( QDataStream & stream, QString & string )
后,string里面是什么呢?

2. 为什么要把文件内容读进QString,再转成QByteArray呢?直接读进QByteArray不更简单直接?

3. 题外,不同文件的md5可以是相同的。MD5 is not collision resistant
[ 此帖被dbzhang800在2009-11-23 22:11重新编辑 ]
离线zzh

只看该作者 2楼 发表于: 2009-11-24
我就是根据manual里的例子做的实验,今晚回家再试试直接读,不转换,另外,我发现读入的文本和图片生成的MD5码,和在win xp 里用鼠标右键点他,选择校验码生成的MD5码都不一样。

不过还是谢谢楼上的这么晚了,还回复我的帖子,谢谢。
离线voidbroken

只看该作者 3楼 发表于: 2011-02-16
mark
快速回复
限100 字节
 
上一个 下一个