MD5加密

          Posted on 2008-10-21 23:36 viita 閱讀(1044) 評論(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

          主站蜘蛛池模板: 临泉县| 蒙阴县| 鄂伦春自治旗| 镇江市| 偏关县| 湟源县| 浦江县| 孟村| 安义县| 石嘴山市| 分宜县| 巧家县| 临泽县| 陵川县| 启东市| 晋江市| 封丘县| 柘城县| 浦江县| 新巴尔虎右旗| 宝山区| 治县。| 香格里拉县| 玉屏| 襄垣县| 东乡| 紫阳县| 社旗县| 安国市| 鹤庆县| 全椒县| 邯郸县| 郁南县| 昔阳县| 大埔县| 金川县| 察哈| 乌苏市| 东明县| 榆林市| 多伦县|