Java生成の概要
7299 ワード
javaセキュリティクラスは、Java.security.MessageDigestクラスを提供しており、このMessage Digestクラスは、アプリケーションに情報要約アルゴリズムの機能を提供しています.例えば、MD 5またはSHA-1アルゴリズムです.情報の要約は、セキュリティの一方向ハッシュ関数であり、任意のサイズのデータを受信し、固定長のハッシュ値を出力する.MD 5の非常に実用的な応用性がある.説明参照:http://blog.csdn.net/Daping_Zhang/archive/2005/05/28/382688.aspxこのクラスのget Instance(String algorithm)方法は、Message Digestのエンティティに戻り、暗号化されたシステムのdigest()方法とudate(byte input)方法です.暗号化された後、byte[]に戻ります.16ビットの場合、多くのオープンソースのダウンロードアドレスに「md 5」のリンクがあります.開くとテキストの内容が短いです.例えば、MD 5(commons-loging-1.11-bin.zip)=f 88520 ed 6 c 4591 bc 058 b 55これはJakataのloggingコンポーネントのダウンロード時に提供されるMD 5要約情報であり、このzipパッケージを全文暗号化して生成する要約です.この二つの要約が同じなら、この書類は誰にも改竄されていないことを証明します.JavaのMessage Digest類は実行後に戻ってくるbyte[16]を16進の文字列に変換します.直接new String(byte[])を使うと、結果は正しくありません.まず次のように整理します
public class MD5Builder {
static Logger logger = Logger.getLogger(MD5Builder.class);
// 16
static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'a', 'b', 'c', 'd', 'e', 'f' };
/**
* MD5
* @param file
* @return MD5
*/
public static String getMD5(File file) {
FileInputStream fis = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
logger.info("MD5 :" + md.getDigestLength());
fis = new FileInputStream(file);
byte[] buffer = new byte[2048];
int length = -1;
logger.info(" ");
long s = System.currentTimeMillis();
while ((length = fis.read(buffer)) != -1) {
md.update(buffer, 0, length);
}
logger.info(" , : "
+ (System.currentTimeMillis() - s) + "ms");
byte[] b = md.digest();
return byteToHexString(b);
// 16
// return buf.toString().substring(8, 24);
} catch (Exception ex) {
logger.error(ex);
ex.printStackTrace();
return null;
}finally {
try {
fis.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
/**
* String MD5
* @param message String
* @return MD5
*/
public static String getMD5(String message){
try {
MessageDigest md = MessageDigest.getInstance("MD5");
logger.info("MD5 :" + md.getDigestLength());
byte[] b = md.digest(message.getBytes());
return byteToHexString(b);
} catch (NoSuchAlgorithmException e) {
logger.error(e);
e.printStackTrace();
return null;
}
}
/**
* byte[]
* @param tmp byte[]
* @return
*/
private static String byteToHexString(byte[] tmp) {
String s;
// 16
char str[] = new char[16 * 2]; // 16 , ,
// 16 32
int k = 0; //
for (int i = 0; i < 16; i++) { // , MD5
// 16
byte byte0 = tmp[i]; // i
str[k++] = hexDigits[byte0 >>> 4 & 0xf]; // 4 ,
// >>> ,
str[k++] = hexDigits[byte0 & 0xf]; // 4
}
s = new String(str); //
return s;
}
}