MD 5暗号化の簡単なjava実装


1.まず、MD 5暗号化とは何かを大まかに説明します.MD 5のフルネームはMessage-Digest Algorithm 5(情報-ダイジェストアルゴリズム)で、大神の文章をたくさん見て、自分で少し理解しましたが、MD 5は実は暗号化アルゴリズムではなく、情報のダイジェストです.その特性は不可逆的であるため,一般的な逆シーケンスアルゴリズムを暴力的に解く以外に結果は得られない.例えば、1+99=100のように、MD 5が受け取った文字は1と99であり、自分のアルゴリズムで最後に100を生成するが、結果が100であることを知っていると、1+99で得られたと推測するのは難しい.例えば、1冊の本のページごとに1文字を取り、最後にMD 5コードを計算したが、このMD 5コードでこの本の内容を推測するのは難しい.これがMD 5の不可逆的な原因である.挙げた例とMD 5に対する理解は本人自身の観点のみを代表しており、誤りがあれば大神様のご叱正をお願いします.
2.この文章は复雑なMD 5のアルゴリズムの実现を讨论しないで、本人は科班が生まれたのではありませんて、ただプロジェクトの中で使うので大体使って、具体的な原理などは后で暇な时间があってゆっくり研究します.あまり話さないで、直接コードをつけます.
3.2つの方法①getMD 5()と②MD 5()を共有し、暗号化する文字strを入力し、暗号化に成功した文字を返す.方法1は小文字+数字を生成し,方法2は大文字+数字を生成し,方法2は小文字+数字を得るためにhexDigits配列中の大文字を小文字に変換する.大文字と小文字はStringクラスのメソッドで処理できます
package com.nebula.app.app.common.utils;

import java.math.BigInteger;
import java.security.MessageDigest;

public class AppMD5Util {
	
	 /**
     *     md5  (  +  )
     *
     * @param str          
     * @return  MD5       
     */
    public static String getMD5(String str) {
        try {
            //     MD5      
            MessageDigest md = MessageDigest.getInstance("MD5");
            //   md5  
            md.update(str.getBytes());
            // digest()      md5 hash ,    8    。  md5 hash  16  hex ,     8    
            // BigInteger    8        16 hex ,       ;        hash 
            return new BigInteger(1, md.digest()).toString(16);
        } catch (Exception e) {
           e.printStackTrace();
           return null;
        }
    }
    
    
    /**
     *     md5  (  +  )
     *
     * @param str          
     * @return  MD5       
     */
    
    public static String MD5(String s) {
        char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};       

        try {
            byte[] btInput = s.getBytes();
            //   MD5      MessageDigest   
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            //            
            mdInst.update(btInput);
            //     
            byte[] md = mdInst.digest();
            //                 
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

         public static void main(String[] args) {
        String md5 = MD5("password");
              String md52 = getMD5("password22");         
    }
}

4.上記の方法は直接応急的に使うことができて、时間があればMD 5の実現を理解することを提案して、持ってくる主義は頼りにならないで、ははは.