即興的靈感

          思維是一種藝術; 藝術需要靈感。

          博客好友

          最新評論

          信息摘要算法實現之MD5算法

          ???在計算機安全領域,涉及到一個重要的范疇,那就是加密解密技術,加密解密技術的發展,為計算機安全提供了很大的保障,同時也隨著破解技術的蔓延,對計算機安全帶來了挑戰,本文將個人之前對加密解密算法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();
          ??? }
          }

          ???以上即是有關JAVA加密算法中的信息摘要算法MD5的一些介紹跟使用與源碼。

          ?
          鳳凰涅槃/浴火重生/馬不停蹄/只爭朝夕
          ???? 隱姓埋名/低調華麗/簡單生活/完美人生

          posted on 2008-12-04 23:28 poetguo 閱讀(3446) 評論(2)  編輯  收藏 所屬分類: 算法Algorithm JAVA

          評論

          # re: 信息摘要算法實現之MD5算法[未登錄] 2008-12-05 09:00 Matthew Chen

          char[] charArray = inputStr.toCharArray(); //將字符串轉換為字符數組
          不大好,考慮到string編碼方式還是用inputStr.getbytes()這類的方法好,如果加上編碼方式,還原的時候用上就是了。  回復  更多評論   

          # re: 信息摘要算法實現之MD5算法 2008-12-05 11:06 即興詩人

          使用String的getBytes方法確比toCharArray好,感謝留言指出!@Matthew Chen
            回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 布尔津县| 南通市| 宁河县| 博白县| 东明县| 依兰县| 大埔县| 兴海县| 会昌县| 湖北省| 红安县| 广安市| 富民县| 平昌县| 巴南区| 东兴市| 永泰县| 朝阳市| 哈尔滨市| 平湖市| 抚远县| 卢湾区| 伊吾县| 庄浪县| 上犹县| 基隆市| 隆回县| 建瓯市| 永吉县| 墨竹工卡县| 沾益县| 鸡西市| 江陵县| 金塔县| 历史| 桂阳县| 富宁县| 轮台县| 禄劝| 南川市| 兴业县|