???在計算機安全領(lǐng)域,涉及到一個重要的范疇,那就是加密解密技術(shù),加密解密技術(shù)的發(fā)展,為計算機安全提供了很大的保障,同時也隨著破解技術(shù)的蔓延,對計算機安全帶來了挑戰(zhàn),本文將個人之前對加密解密算法MD5的了解跟使用做個總結(jié)。
???在計算機加密算法當(dāng)中,主要存在對稱密鑰體制、非對稱密鑰體制公鑰體系、消息摘要、以及數(shù)字簽名等大類型的算法。其中消息摘要有兩個主要算法,下文作簡要介紹消息摘要中的MD5算法以及對MD5算法的使用。
???在介紹MD5算法之前,先介紹下哈希函數(shù)。哈希函數(shù)(HASH)的運算原理為:任意輸入一個任何長度的任何字符串,通過哈希函數(shù)運算之后返回一串固定長度的字符串,該字符串即稱為HASH值,用于計算哈希值的單向HASH函數(shù)將用于產(chǎn)生目標(biāo)信息摘要。使用HASH函數(shù)主要可以解決兩個問題:第一,我們無法從經(jīng)過哈希函數(shù)產(chǎn)生的哈希值反向計算出運算前的信息原文;第二,無法查找兩個經(jīng)HASH操作后生成相同HASH值的不同原文。因此利用哈希函數(shù),在數(shù)字簽名中就可以解決驗證簽名和用戶身份驗證、不可抵賴性的問題。?
???由于信息摘要能簡要地描述了一份較長的信息或文件,因此信息摘要被稱為“數(shù)字指紋”。對于某一個文件原文,產(chǎn)生的信息摘要是唯一的。同時,也由于我們無法逆向計算出原文,信息摘要也就不怕被公開,即使公開,也無法得到原文信息。
????MD2,MD4和MD5算法就是一種被廣泛使用的HASH函數(shù),是由Ron Rivest 設(shè)計的專門用于加密處理的單散列函數(shù),通過MD5算法運算之后將產(chǎn)生一個128位(16字節(jié))的信息摘要,除非使用暴力破解,沒能找到其他好的方法,而一般計算機運算能力暴力破解時間一般需要一千多年之久,因此MD5算法是一種優(yōu)秀的加密算法。
???以下是有關(guān)MD5算法的實現(xiàn)過程代碼分析。
import java.security.MessageDigest;
public class MyMD5? {
??? public MyMD5() {
??? }
??? /**
???? *???計算一字符串MD5信息摘要
???? *? ?@返回一個信息摘要
???? */
??? public static? String computeMD5(String inputStr) {
??????? MessageDigest md5=null;
??????? try {
????????? ??//創(chuàng)建MD5函數(shù)對象
??????????? md5 = MessageDigest.getInstance("MD5");
??????? } catch (Exception e) {
??????????? System.out.println(e.toString());
??????????? e.printStackTrace();
??????????? return "";
??????? }
??????? char[] charArray = inputStr.toCharArray(); //將字符串轉(zhuǎn)換為字符數(shù)組
??????? byte[] byteArray = new byte[charArray.length]; //創(chuàng)建字節(jié)數(shù)組
??????? for (int i = 0; i < charArray.length; i++)
??????? //將字符轉(zhuǎn)換為字節(jié)
???????? byteArray[i] = (byte) charArray[i];
??????? //將得到的字節(jié)數(shù)組進行MD5運算
?????????byte[] md5Bytes = md5.digest(byteArray);
??????? StringBuffer reMD5Str= new StringBuffer();
??????? for (int i = 0; i < md5Bytes.length; i++) ...{
??????????? int val = ((int) md5Bytes[i]) & 0xff;
??????????? if (val < 16)
??????????????? hexValue.append("0");
??????????? hexValue.append(Integer.toHexString(val));
??????? }
?????? //返回信息摘要結(jié)果字符串
??????? return reMD5Str.toString();
??? }
}
???以上即是有關(guān)JAVA加密算法中的信息摘要算法MD5的一些介紹跟使用與源碼。
?
鳳凰涅槃/浴火重生/馬不停蹄/只爭朝夕
???? 隱姓埋名/低調(diào)華麗/簡單生活/完美人生