MD5 の正式名は、Message-Digest Algorithm 5 です。Message-Digest は一般に、バイト文字列 (メッセージ) のハッシュ変換を指します。これは、任意の長さのバイト文字列を特定の長さの大きな整数に変換することです。 MD5 は、任意の長さの「バイト列」を 128 ビットの大きな整数に変換します。つまり、ソース プログラムとアルゴリズムの説明を見ても、MD5 値を変換することはできません。数学的に言えば、元の文字列が無限に存在するため、元の文字列に戻されます。これは、逆関数を持たない数学関数に似ています。
次のようにコードをコピーします。
java.security.MessageDigestをインポートします。
パブリック クラス Test_MD5{
パブリック最終静的文字列 MD5(String s) {
char hexDigits[] = { '0'、'1'、'2'、'3'、'4'、'5'、'6'、'7'、'8'、'9'、
'a'、'b'、'c'、'd'、'e'、'f' };
試す {
byte[]strTemp=s.getBytes();
//MD5 を使用して MessageDigest オブジェクトを作成する
MessageDigestmdTemp=MessageDigest.getInstance("MD5");
mdTemp.update(strTemp);
byte[]md=mdTemp.digest();
intj=md.length;
charstr[]=newchar[j*2];
intk=0;
for(inti=0;i<j;i++){
byteb=md[i];
//System.out.println((int)b);
//数値(int)bを2バイトで暗号化する
str[k++]=hexDigits[b>>4&0xf];
str[k++]=hexDigits[b&0xf];
}
returnnewString(str);
}catch(Exceptione){returnnull;}
}
//テスト
publicstaticvoidmain(String[]args){
System.out.println("caidao の MD5 暗号化:/n"+Test_MD5.MD5("caidao"));
System.out.println("//www.VeVB.COm/ MD5 暗号化後:/n"+Test_MD5.MD5("//www.VeVB.COm/"));
}
}
MD5 の一般的な用途は、メッセージ (バイト文字列) の「改ざん」を防ぐためにメッセージ (バイト文字列) にフィンガープリントを生成することです。たとえば、readme.txt というファイルに段落を記述し、この readme.txt の MD5 値を生成して記録すると、他の人がそのファイルの内容を変更した場合に、そのファイルを見つけることができます。このファイルの MD5 を再計算するとき。第三者の認証機関がある場合、MD5 を使用することでファイル作成者の「否認」を防ぐこともできます。これはいわゆるデジタル暗号化アプリケーションです。
MD5 は、暗号化および復号化テクノロジでも広く使用されており、ユーザーのパスワードは MD5 値 (または他の同様のアルゴリズム) の形式で保存されます。ユーザーがログインすると、システムはユーザーが入力したパスワードを計算します。次に、MD5 値がシステムに保存されている MD5 値と比較されますが、システムはユーザーのパスワードが何であるかを「認識」しません。
MD5 は理論的には一方向ハッシュであり、一部のハッカーはこのパスワードを解読するために「辞書実行」と呼ばれる方法を使用します。辞書を取得するには 2 つの方法があり、1 つはパスワードとして使用される文字列テーブルの毎日の収集で、もう 1 つは順列および結合方法を使用して生成されます。まず、MD5 プログラムを使用してこれらの辞書項目の MD5 値を計算します。 、ターゲットの MD5 値を使用して、この辞書で検索されます。
パスワードの最大長が 8 で、パスワードに文字と数字のみを使用できると仮定した場合でも、合計 26+26+10=62 文字となり、順列によって形成される辞書内の項目数は P になります。 (62,1)+P(62,2)....+P(62,8)、これはすでに天文学的な数字です。この辞書を保存するには、TB レベルのディスク グループが必要です。また、この方法には前提条件もあります。これは、ターゲット アカウントを取得するためのもので、パスワードに MD5 値が含まれている場合にのみ可能です。