MD 5暗号化の簡単なjava実装
2950 ワード
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クラスのメソッドで処理できます
4.上記の方法は直接応急的に使うことができて、时間があれば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の実現を理解することを提案して、持ってくる主義は頼りにならないで、ははは.