java實現(xiàn)MD5加密方法匯總
更新時間:2015年10月29日 11:44:18 投稿:hebedich
本文給大家匯總介紹了2種java實現(xiàn)MD5加密的方法,非常的實用,這里分享給大家,學習下其中的思路,對大家學習java非常有幫助。
代碼一:
/**
* 實現(xiàn)MD5加密
*
*/
public class MD5 {
/**
* 獲取加密后的字符串
* @param input
* @return
*/
public static String stringMD5(String pw) {
try {
// 拿到一個MD5轉(zhuǎn)換器(如果想要SHA1參數(shù)換成”SHA1”)
MessageDigest messageDigest =MessageDigest.getInstance("MD5");
// 輸入的字符串轉(zhuǎn)換成字節(jié)數(shù)組
byte[] inputByteArray = pw.getBytes();
// inputByteArray是輸入字符串轉(zhuǎn)換得到的字節(jié)數(shù)組
messageDigest.update(inputByteArray);
// 轉(zhuǎn)換并返回結果,也是字節(jié)數(shù)組,包含16個元素
byte[] resultByteArray = messageDigest.digest();
// 字符數(shù)組轉(zhuǎn)換成字符串返回
return byteArrayToHex(resultByteArray);
} catch (NoSuchAlgorithmException e) {
return null;
}
}
public static String byteArrayToHex(byte[] byteArray) {
// 首先初始化一個字符數(shù)組,用來存放每個16進制字符
char[] hexDigits = {'0','1','2','3','4','5','6','7','8','9', 'A','B','C','D','E','F' };
// new一個字符數(shù)組,這個就是用來組成結果字符串的(解釋一下:一個byte是八位二進制,也就是2位十六進制字符(2的8次方等于16的2次方))
char[] resultCharArray =new char[byteArray.length * 2];
// 遍歷字節(jié)數(shù)組,通過位運算(位運算效率高),轉(zhuǎn)換成字符放到字符數(shù)組中去
int index = 0;
for (byte b : byteArray) {
resultCharArray[index++] = hexDigits[b>>> 4 & 0xf];
resultCharArray[index++] = hexDigits[b& 0xf];
}
// 字符數(shù)組組合成字符串返回
return new String(resultCharArray);
}
}
方法二:
package other;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/*
* MD5 算法
*/
public class MD5 {
// 全局數(shù)組
private final static String[] strDigits = { "0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
public MD5() {
}
// 返回形式為數(shù)字跟字符串
private static String byteToArrayString(byte bByte) {
int iRet = bByte;
// System.out.println("iRet="+iRet);
if (iRet < 0) {
iRet += 256;
}
int iD1 = iRet / 16;
int iD2 = iRet % 16;
return strDigits[iD1] + strDigits[iD2];
}
// 返回形式只為數(shù)字
private static String byteToNum(byte bByte) {
int iRet = bByte;
System.out.println("iRet1=" + iRet);
if (iRet < 0) {
iRet += 256;
}
return String.valueOf(iRet);
}
// 轉(zhuǎn)換字節(jié)數(shù)組為16進制字串
private static String byteToString(byte[] bByte) {
StringBuffer sBuffer = new StringBuffer();
for (int i = 0; i < bByte.length; i++) {
sBuffer.append(byteToArrayString(bByte[i]));
}
return sBuffer.toString();
}
public static String GetMD5Code(String strObj) {
String resultString = null;
try {
resultString = new String(strObj);
MessageDigest md = MessageDigest.getInstance("MD5");
// md.digest() 該函數(shù)返回值為存放哈希值結果的byte數(shù)組
resultString = byteToString(md.digest(strObj.getBytes()));
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
}
return resultString;
}
public static void main(String[] args) {
MD5 getMD5 = new MD5();
System.out.println(getMD5.GetMD5Code("000000"));
}
}
相關文章
Spring Cloud 2023 新特性支持同步網(wǎng)關
這篇文章主要為大家介紹了Spring Cloud 2023 新特性支持同步網(wǎng)關講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10
利用Spring Data MongoDB持久化文檔數(shù)據(jù)的方法教程
這篇文章主要給大家介紹了關于利用Spring Data MongoDB持久化文檔數(shù)據(jù)的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考借鑒,下面來一起看看吧。2017-08-08
Java 可視化垃圾回收_動力節(jié)點Java學院整理
Ben Evans是一名資深培訓師兼顧問,他在演講可視化垃圾回收中從基礎談起討論了垃圾回收。以下是對其演講的簡短總結。感興趣的朋友一起學習吧2017-05-05

