簡(jiǎn)單字符串MD5加密
1.MessageDigest.getInstance("MD5").digest("需要加密的字符".getBytes()) 計(jì)算出來(lái)的結(jié)果返回的byte[]長(zhǎng)度始終為16位。
2.要記住我們計(jì)算出來(lái)的md5(32位)最后都都是固定長(zhǎng)度32的字符串
?* byte有8位,假如全部都是 11111111 那么對(duì)應(yīng)的int(10進(jìn)制)類型就是 255
* 雖然255(十進(jìn)制)和11111111(二進(jìn)制)都表示同一個(gè)數(shù),但作為String類型存儲(chǔ)255作為String類型存儲(chǔ)長(zhǎng)度為3,而11111111作為string類型存儲(chǔ)長(zhǎng)度為8
3.將byte[16]全部轉(zhuǎn)換為正數(shù)的16進(jìn)制字符串剛好是32位。
4.那么在byte[16]轉(zhuǎn)換為16進(jìn)制的固定長(zhǎng)度32的字符串。并不是為了什么,就是為了保證我們可以直觀看到的密文都是固定長(zhǎng)度的。
public static String stringToMD5(String string) {
try {
byte[] hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8"));
StringBuilder hex = new StringBuilder(hash.length * 2);
for (byte b : hash) {
hex.append((b & 0xFF) < 0x10 ? "0" + Integer.toHexString(b & 0xFF) : Integer.toHexString(b & 0xFF));
}
return hex.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
這個(gè)的做法就是想讓結(jié)果變成16進(jìn)制,每?jī)蓚€(gè)字符代表一個(gè)字節(jié)。小于0x10(16)的時(shí)候,比如a,這樣就要在它前面加個(gè)0:0a,
如果不小于0x10,比如1a,這樣就是兩位了,不用加0。?
因篇幅問(wèn)題不能全部顯示,請(qǐng)點(diǎn)此查看更多更全內(nèi)容
Copyright ? 2019- 91gzw.com 版權(quán)所有 湘ICP備2023023988號(hào)-2
違法及侵權(quán)請(qǐng)聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市萬(wàn)商天勤律師事務(wù)所王興未律師提供法律服務(wù)