MD5中的MD代表Message Digest,就是信息摘要的意思,不过这个信息摘要不是信息内容的缩写,而是根据公开的MD5算法对原信息进行数学变换后得到的一个128位(bit)的特征码。
这个特征码有如下特性,首先它不可逆,例如我有一段秘密的文字如:"My Secret Words",经算法变换后得到MD5码(b9944e9367d2e40dd1f0c4040d4daaf7),把这个码告诉其他人,他们根据这个MD5码是没有系统的方法可以知道你原来的文字是什么的。
其次,这个码具有高度的离散性,也就是说,原信息的一点点变化就会导致MD5的巨大变化,例如"ABC" MD5(902fbdd2b1df0c4f70b4a5d23525e932)和"ABC "(多了一空格)MD5(12c774468f981a9487c30773d8093561)差别非常大,而且之间没有任何关系,也就是说产生的MD5码是不可预测的。
最后由于这个码有128位那么长,所以任意信息之间具有相同MD5码的可能性非常之低,通常被认为是不可能的。
所以一般认为MD5码可以唯一地代表原信息的特征,通常用于密码的加密存储,数字签名,文件完整性验证等。
一:
在src 里找到md5的 h 和cpp
#include "md5.cpp"
MD5Context md5ctx;
MD5Init(&md5ctx);
QString test="yjy";
QByteArray arr=test.toAscii();
MD5Update(&md5ctx,(const md5byte *)arr.data(),arr.size());
md5byte ans[16];
MD5Final(&md5ctx,ans);
for (int i=0;i<16;i++){
qDebug("%X",ans[i]);
}
二:
QT中,提供了QCryptographicHash类,很方便的实现的字符串到md5/md4/sha1的转换,
可以通过两种方法实现:
QString pwd="123456";
QString md5;
QByteArray ba,bb;
QCryptographicHash md(QCryptographicHash::Md5);
ba.append(pwd);
md.addData(ba);
bb = md.result();
md5.append(bb.toHex());
QString pwd="123456";
QString md5;
QByteArray ba,bb;
QCryptographicHash md(QCryptographicHash::Md5);
ba.append(pwd);
md.addData(ba);
bb = md.result();
md5.append(bb.toHex());
qDebug()<<md5;
第二种方法比较直接:
QString md5;
QString pwd="123456";
QByteArray bb;
bb = QCryptographicHash::hash ( pwd.toAscii(), QCryptographicHash::Md5 );
md5.append(bb.toHex());