Java三行代码搞定MD5加密

Get MD5 Hash In A Few Lines Of Java

 /**
 * 對字符串md5加密
 *
 * @param str
 * @return
 */
 public String getMD5(String str) {
 String ret = null;
 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值
 ret = new BigInteger(1, md.digest()).toString(16);
 } catch (Exception e) {
 //throw new SpeedException("MD5加密出現錯誤");
 e.printStackTrace();
 }
 return ret;
 }

 


java.math.BigInteger.toString(int radix)方法實例

java.math.BigInteger.toString(int radix) 返回此BigInteger在給定的基數的字符串表示形式。如果基數是從Character.MIN_RADIX到Character.MAX_RADIX包容的範圍內,它會默認為10(因為Integer.toString的情況下)。

聲明

以下是java.math.BigInteger.toString()方法的聲明

public String toString(int radix)

參數

radix – 該字符串表示形式的基數

返回值

此方法返回此BigInteger在給定的基數的字符串表示形式。


BigInteger(byte[] val)
BigInteger的大小为val的顺序拼接结果

byte[] val = new byte[]{0x11,0x22,0x33};
BigInteger bigInteger = new BigInteger(val);
System.out.println(bigInteger.toString(16)); //16进制输出 , 结果 : 112233

BigInteger(String val, int radix)
得到大小为val , 以 radix 为基数的 BigInteger

BigInteger bigInteger = new BigInteger("1F", 16);
System.out.println(bigInteger.toString(16));//输出结果 1f
System.out.println(bigInteger.toString(10));//输出结果 31

String s1 = "126656864e144ad88d7ff96badd2f68b"; // 16进制数
BigInteger b = new BigInteger(s1,16);           // 16进制转成大数类型    
String s2 = b.toString(16);                     // 大数类型转成16进制

上列的範例輸入結果:

s1: 126656864e144ad88d7ff96badd2f68b
s2: 126656864e144ad88d7ff96badd2f68b

如果前2碼修改為00,則:

s1: 006656864e144ad88d7ff96badd2f68b
s2: 6656864e144ad88d7ff96badd2f68b

所以,最上面的例子,前面要補滿0 才不會出錯。

Comments

  1. md5 開頭如果是 0 的話
    new BigInteger(1, md.digest())
    經過這邊的話開頭的 0 會不見吧?

    1. 感謝你的回覆,答案:是的。已增加補充在文章最後。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *