java使用MD5加密
一、主要使用MessageDigest類(java.security包下)
1、首先,先看下官方文檔
- 此 MessageDigest 類為應用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的單向哈希函數,它接收任意大小的數據,并輸出固定長度的哈希值。
- MessageDigest 對象開始被初始化。該對象通過使用 update 方法處理數據。任何時候都可以調用 reset 方法重置摘要。一旦所有需要更新的數據都已經被更新了,應該調用 digest 方法之一完成哈希計算。
- 對于給定數量的更新數據,digest 方法只能被調用一次。在調用 digest 之后,MessageDigest 對象被重新設置成其初始狀態
2、接下來看幾個MessageDigest的方法(按照使用順序介紹)
| ? | update(byte[]?input) ??????????使用指定的 byte 數組更新摘要。 |
3、將字節數組轉換成16進制字符串
為什么要將字節數組轉換成16進制字符串?
我們使用digest()方法獲得MessageDigest生成的摘要后需要將其轉換成String字符串
Java中無論是漢字還是英文字母都是用Unicode編碼來表示的,一個Unicode碼是16位,每字節是8位,所以一個Unicode碼占兩字節。
但是英文字母比較特殊,源自于8位(1字節)的ASCII碼,于是在Unicode碼僅使用了低8位(1字節)就可以表示,高8位的話不使用也無所謂。
?
代碼如下:
String str = "lalalla";byte[] resultByteArray;try {//獲取MessageDigest對象MessageDigest messageDigest = MessageDigest.getInstance("MD5");messageDigest.update(str.getBytes());resultByteArray = messageDigest.digest();for(Byte content:resultByteArray){System.out.println(content);}System.out.println(bytesToHexFun2(resultByteArray));} catch (NoSuchAlgorithmException e) {e.printStackTrace();}?
?二、byte[]轉十六進制String(轉載自:http://blog.csdn.net/worm0527/article/details/69939307)
所謂十六進制String,就是字符串里面的字符都是十六進制形式,因為一個byte是八位,可以用兩個十六進制位來表示,因此,byte數組中的每個元素可以轉換為兩個十六進制形式的char,所以最終的HexString的長度是byte數組長度的兩倍
private static final char[] HEX_CHAR = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; /*** 方法二:* byte[] to hex string* * @param bytes* @return*/public static String bytesToHexFun2(byte[] bytes) { char[] buf = new char[bytes.length * 2]; int index = 0; for(byte b : bytes) { // 利用位運算進行轉換 buf[index++] = HEX_CHAR[b >>> 4 & 0xf];//高四位 buf[index++] = HEX_CHAR[b & 0xf];//低四位 } return new String(buf); }如果是使用MD5得到的摘要進行轉換,那么得到的字符串為32位(因為MD5得到的摘要的字節數組的長度為16),這樣我們利用二中byte[]轉十六進制String的方法將一中生成的字節數組進行轉換,即得到我們需要的String類型的MD5加密字符串。
注意:如果使用new String(byteArray)將獲得的字節數組直接轉換成String,則會出現亂碼
轉載于:https://www.cnblogs.com/lige-H/p/7209946.html
總結
以上是生活随笔為你收集整理的java使用MD5加密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STL queue
- 下一篇: LeetCode 413 等差数列划分