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();
