MD5是一种信息摘要算法。相当于文件指纹。有以下属性:
任意大小的数据,算出的MD5值的长度都是固定的,32位16进制数字;
对原数据的修改,哪怕一个字节,得到的md5值也是大相径庭;
不可恢复,过程不可逆。
广泛应用于登录验证、数字证书、文件校验。
比如在登录验证时,系统会把我们输入的密码提取出来进行MD5加密,与存在数据库中的密码(也是MD5加密过的)进行比对,因为相同字符得到md5值是一样的。
在Qt中如何使用MD5?
这里要用到QCryptographicHash类
1 QByteArray arry = "hello world"; //准备要加密的数据 2 QCryptographicHash hash(QCryptographicHash::Md5); 3 hash.addData(arry); 4 QByteArray str = hash.result();//加密 5 str = str.toHex();//16进制
如果要加密的文件需要从磁盘文件读取
1 QString MainWindow::getMd5(QString path) 2 { 3 QCryptographicHash hash(QCryptographicHash::Md5); 4 // 1 . 添加数据 5 QFile file(path); 6 file.open(QFile::ReadOnly); 7 hash.addData(&file); 8 // 2. 数据运算-> 结果 9 QByteArray res = hash.result().toHex(); 10 // 3. return result 11 return res; 12 }
方法二:利用静态函数
1 array = QCryptographicHash::hash ( “hello world”,QCryptographicHash::Md5 ); 2 3 return array.toHex();
base64
是一种用64个字符来表示任意二进制数据的方法。由A-Z,a-z,0-9.+/组成
在网络上发送数据时,由于要经历多个不同路由设备,不同的设备对字符的处理方式可能不同,这样一些不可见的字符有可能被处理错误。解决办法是先把数据做一个base64编码,全部变为可见字符,降低出错的可能。它是可逆的。
算法表述:每次取3个字节,一共3*8=24位,重新划分为4*6,4组6位。
每组前面补两个0,组成八位一个字节的形式,8*4=32位。
剩下的字节如果不足3个,用0替代。0输出字符是“=”。解码会去掉。
Qt中如何使用base64
1 //编码 2 QByteArray base = "hello world"; 3 base = base.toBase64(); 4 //解码 5 base = QByteArry::fromBase64(base); 6 qDebug() <<base.data();