信息摘要算法實現之MD5算法
???在計算機加密算法當中,主要存在對稱密鑰體制、非對稱密鑰體制公鑰體系、消息摘要、以及數字簽名等大類型的算法。其中消息摘要有兩個主要算法,下文作簡要介紹消息摘要中的MD5算法以及對MD5算法的使用。
???在介紹MD5算法之前,先介紹下哈希函數。哈希函數(HASH)的運算原理為:任意輸入一個任何長度的任何字符串,通過哈希函數運算之后返回一串固定長度的字符串,該字符串即稱為HASH值,用于計算哈希值的單向HASH函數將用于產生目標信息摘要。使用HASH函數主要可以解決兩個問題:第一,我們無法從經過哈希函數產生的哈希值反向計算出運算前的信息原文;第二,無法查找兩個經HASH操作后生成相同HASH值的不同原文。因此利用哈希函數,在數字簽名中就可以解決驗證簽名和用戶身份驗證、不可抵賴性的問題。?
???由于信息摘要能簡要地描述了一份較長的信息或文件,因此信息摘要被稱為“數字指紋”。對于某一個文件原文,產生的信息摘要是唯一的。同時,也由于我們無法逆向計算出原文,信息摘要也就不怕被公開,即使公開,也無法得到原文信息。
????MD2,MD4和MD5算法就是一種被廣泛使用的HASH函數,是由Ron Rivest 設計的專門用于加密處理的單散列函數,通過MD5算法運算之后將產生一個128位(16字節)的信息摘要,除非使用暴力破解,沒能找到其他好的方法,而一般計算機運算能力暴力破解時間一般需要一千多年之久,因此MD5算法是一種優秀的加密算法。
???以下是有關MD5算法的實現過程代碼分析。
import java.security.MessageDigest;
public class MyMD5? {
??? public MyMD5() {
??? }
??? /**
???? *???計算一字符串MD5信息摘要
???? *? ?@返回一個信息摘要
???? */
??? public static? String computeMD5(String inputStr) {
??????? MessageDigest md5=null;
??????? try {
????????? ??//創建MD5函數對象
??????????? md5 = MessageDigest.getInstance("MD5");
??????? } catch (Exception e) {
??????????? System.out.println(e.toString());
??????????? e.printStackTrace();
??????????? return "";
??????? }
??????? char[] charArray = inputStr.toCharArray(); //將字符串轉換為字符數組
??????? byte[] byteArray = new byte[charArray.length]; //創建字節數組
??????? for (int i = 0; i < charArray.length; i++)
??????? //將字符轉換為字節
???????? byteArray[i] = (byte) charArray[i];
??????? //將得到的字節數組進行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));
??????? }
?????? //返回信息摘要結果字符串
??????? return reMD5Str.toString();
??? }
}
?
鳳凰涅槃/浴火重生/馬不停蹄/只爭朝夕
???? 隱姓埋名/低調華麗/簡單生活/完美人生
posted on 2008-12-04 23:28 poetguo 閱讀(3446) 評論(2) 編輯 收藏 所屬分類: 算法Algorithm 、JAVA