常見(jiàn)算法
MD5、SHA、CRC 等
使用場(chǎng)景
- 對(duì)用戶密碼進(jìn)行md5 加密后保存到數(shù)據(jù)庫(kù)里
- 軟件下載站使用消息摘要計(jì)算文件指紋,防止被篡改
- 數(shù)字簽名
例如軟件下載站數(shù)據(jù)指紋:
http://dev.mysql.com/downloads/installer/
Paste_Image.png
使用步驟
1. //常用算法:MD5、SHA、CRC
2. MessageDigest digest = MessageDigest.getInstance("MD5");
3. byte[] result = digest.digest(content.getBytes());
4. //消息摘要的結(jié)果一般都是轉(zhuǎn)換成16 進(jìn)制字符串形式展示
5. String hex = Hex.encode(result);
6. //MD5 結(jié)果為16 字節(jié)(128 個(gè)比特位)、轉(zhuǎn)換為16 進(jìn)制表示后長(zhǎng)度是32 個(gè)字符
7. //SHA 結(jié)果為20 字節(jié)(160 個(gè)比特位)、轉(zhuǎn)換為16 進(jìn)制表示后長(zhǎng)度是40 個(gè)字符
8. System.out.println(hex);
消息摘要后的結(jié)果是固定長(zhǎng)度,無(wú)論你的數(shù)據(jù)有多大,哪怕是只有一個(gè)字節(jié)或者是一個(gè)G 的文件,摘要
后的結(jié)果都是固定長(zhǎng)度。
經(jīng)常聽(tīng)到有人問(wèn)這樣的問(wèn)題,MD5 摘要后結(jié)果到底是多少位?有的人說(shuō)是16 位,有的說(shuō)是128 位,有
的說(shuō)是32 位。到底是多長(zhǎng),這個(gè)時(shí)候我們就要明白,16 位指的是字節(jié)位數(shù),128 位指的是比特位,32 位
指的結(jié)果轉(zhuǎn)換成16 進(jìn)制展示的字符位數(shù)。