JAVAのMD 5暗号化


MD 5の全称はMessage-Digest Algorithm 5であり、Message-Digest汎指バイト列(Message)のHash変換は、任意の長さのバイト列を一定の長さの大きな整数に変換することである.MD 5は任意の長さの「バイト列」を128 bitの大きな整数に変換し、不可逆的な文字列変換アルゴリズムである.言い換えれば、ソースプログラムとアルゴリズムの記述を見ても、MD 5の値を元の文字列に変換することはできない.数学的原理から言えば、元の文字列が無限に複数あるためである.これは反関数が存在しない数学関数に似ている.

import java.security.MessageDigest; 
public class Test_MD5{ 
public final 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[] strTemp = s.getBytes(); 
   //  MD5  MessageDigest   
   MessageDigest mdTemp = MessageDigest.getInstance("MD5"); 
   mdTemp.update(strTemp); 
   byte[] md = mdTemp.digest(); 
   int j = md.length; 
   char str[] = new char[j * 2]; 
   int k = 0; 
   for (int i = 0; i < j; i++) { 
    byte b = md[i]; 
    //System.out.println((int)b); 
    //    (int)b        
    str[k++] = hexDigits[b >> 4 & 0xf]; 
    str[k++] = hexDigits[b & 0xf]; 
   } 
   return new String(str); 
  } catch (Exception e) {return null;} 
  } 
  //   
public static void main(String[] args) { 
  System.out.println("caidao MD5   :
"+Test_MD5.MD5("caidao")); System.out.println("http://www.baidu.com/ MD5 :
"+Test_MD5.MD5("http://www.baidu.com/")); } }

MD 5の典型的な応用は、「改ざん」を防止するために、1つのMessage(バイト列)に対してfingerprint(指紋)を生成することである.例を挙げると、readme.txtというファイルに話を書き、このreadme.txtに対してMD 5の値を生成して記録します.その後、このファイルを他の人に伝えることができます.他の人がファイルの内容を変更した場合、このファイルに対してMD 5を再計算すると、発見されます.もう1つの第三者認証機関があれば、MD 5で文書作成者の「言い逃れ」を防ぐこともできる、いわゆるデジタル****アプリです.
MD 5は暗号化と復号化の技術にも広く用いられており、多くのオペレーティングシステムでは、ユーザのパスワードはMD 5値(または類似の他のアルゴリズム)で保存されており、ユーザLoginの場合、システムはユーザが入力したパスワードをMD 5値に計算し、システムに保存されているMD 5値と比較するが、システムはユーザのパスワードが何であるかを「知らない」.
MD 5は理論的には一方向のハッシュハッシュハッシュであり、一部のハッカーがこのパスワードを破る方法は「辞書を走る」と呼ばれる方法である.辞書を得る方法は2つあります.1つは日常的に収集された暗号化用の文字列表で、もう1つは配列組合せ法で生成され、MD 5プログラムでこれらの辞書項目のMD 5値を計算してから、ターゲットのMD 5値でこの辞書で検索します.
パスワードの最大長さが8であると仮定しても、パスワードはアルファベットと数字の26+26+10=62文字しかなく、組み合わせられた辞書を並べた項目数はP(62,1)+P(62,2)….+P(62,8)であり、それはすでに天文的な数字であり、この辞書を格納するにはTB級のディスクグループが必要であり、この方法にはもう一つの前提がある.ターゲットアカウントのパスワードMD 5値を取得できる場合のみ可能です.