MD5加密

          Posted on 2008-10-21 23:36 viita 閱讀(1040) 評論(0)  編輯  收藏 所屬分類: struts
           MD5的全稱是Message-digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc,的Ronald L. Rivest開發出來,經MD2、MD3和MD4發展而來。

                  不管是MD2、MD4還是MD5,它們都需要獲得一個隨機長度的信息并產生一個128位的信息摘要。

                  在MD5算法中,首先需要對信息進行填充,使其字節長度對512求余的結果等于448。因此,信息的字節長度(Bits Length)將被擴展至N*512+448,即N*64+56個字節(Bytes),N為一個正整數。填充的方法如下,在信息的后面填充一個1和無數個0,直到滿足上面的條件時才停止用0對信息的填充。然后,在在這個結果后面附加一個以64位二進制表示的填充前信息長度。經過這兩步的處理,現在的信息字節長度=N*512+448+64=(N+1)*512,即長度恰好是512的整數倍。這樣做的原因是為滿足后面處理中對信息長度的要求。

                  具體的一個MD5實現:

           1package com.meng;
           2
           3
           4import java.security.MessageDigest;
           5
           6/**
           7* <p>
           8* Title:
           9* </p>
          10* <p>
          11* Description:
          12* </p>
          13* <p>
          14* Copyright: Copyright (c) 2003
          15* </p>
          16* <p>
          17* Company:
          18* </p>
          19
          20@author unascribed
          21@version 1.0
          22*/

          23
          24public class MD5 {
          25
          26    private final static String[] hexDigits = "0""1""2""3""4""5",
          27            "6""7""8""9""a""b""c""d""e""f" }
          ;
          28
          29    /**
          30     * 轉換字節數組為16進制字串
          31     * 
          32     * @param b
          33     *            字節數組
          34     * @return 16進制字串
          35     */

          36
          37    public static String byteArrayToHexString(byte[] b) {
          38        StringBuffer resultSb = new StringBuffer();
          39        for (int i = 0; i < b.length; i++{
          40            resultSb.append(byteToHexString(b[i]));
          41        }

          42        return resultSb.toString();
          43    }

          44
          45    private static String byteToHexString(byte b) {
          46        int n = b;
          47        if (n < 0)
          48            n = 256 + n;
          49        int d1 = n / 16;
          50        int d2 = n % 16;
          51        return hexDigits[d1] + hexDigits[d2];
          52    }

          53
          54    public static String MD5Encode(String origin) {
          55        String resultString = null;
          56
          57        try {
          58            resultString = new String(origin);
          59            MessageDigest md = MessageDigest.getInstance("MD5");
          60            resultString = byteArrayToHexString(md.digest(resultString
          61                    .getBytes()));
          62        }
           catch (Exception ex) {
          63
          64        }

          65        return resultString;
          66    }

          67
          68    public static void main(String[] args) {
          69        System.err.println(MD5Encode("哈哈"));
          70
          71
          72        
          73    }

          74}

          75
          76

          posts - 11, comments - 18, trackbacks - 0, articles - 4

          Copyright © viita

          主站蜘蛛池模板: 甘洛县| 广河县| 土默特左旗| 涟源市| 徐汇区| 淳化县| 鄯善县| 石渠县| 宕昌县| 阿克苏市| 玉树县| 丘北县| 元氏县| 于田县| 札达县| 夏津县| 沾化县| 观塘区| 余江县| 新昌县| 墨江| 夏邑县| 沂水县| 大渡口区| 阳谷县| 桐乡市| 柘城县| 南开区| 阳西县| 丰原市| 虹口区| 分宜县| 抚远县| 威海市| 陆川县| 盐池县| 隆林| 开阳县| 建阳市| 砀山县| 高州市|