java MD5演算法返回數字型字串
來源:互聯網
上載者:User
常有人問及MD5演算法為何有些程式片斷返回完全數字型結果而有些返回數字與字母的混合字串。
其實兩種返回結果只是因為加密結果的不同顯示形式,Blog中已經有.Net的實現,在此附加JAVA實現,供參考。
JAVA的標準類庫理論上功能也很強大,但由於虛擬機器/運行時的實現太多,加之版本差異,有些代碼在不同環境下運行會出現奇怪的異常結果,尤其以涉及字元集的操作為甚。
package com.bee.framework.common;
import java.security.MessageDigest;
public class MD5Encrypt {
public MD5Encrypt() {
}
private final static String[] hexDigits = {
"0", "1", "2", "3", "4", "5", "6", "7",
"8", "9", "a", "b", "c", "d", "e", "f"};
/**
* 轉換位元組數組為16進位字串
* @param b 位元組數組
* @return 16進位字串
*/
public static String byteArrayToString(byte[] b) {
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < b.length; i++) {
//resultSb.append(byteToHexString(b[i]));//若使用本函數轉換則可得到加密結果的16進位表示,即數字字母混合的形式
resultSb.append(byteToNumString(b[i]));//使用本函數則返回加密結果的10進位數字字串,即全數字形式
}
return resultSb.toString();
}
private static String byteToNumString(byte b) {
int _b = b;
if (_b < 0) {
_b = 256 + _b;
}
return String.valueOf(_b);
}
private static String byteToHexString(byte b) {
int n = b;
if (n < 0) {
n = 256 + n;
}
int d1 = n / 16;
int d2 = n % 16;