java MD5加密實現(xiàn)代碼
先從下面這張圖對MD5加密實現(xiàn)進(jìn)行了解,具體如下
package com.pb; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Scanner; /* * 驗證MD5 * 1.初始化MessageDigest信息摘要對象 * 2.傳入需要計算的字符串更新摘要信息 * 3.計算信息摘要 * 4.將byte[] 轉(zhuǎn)換為找度為32位的16進(jìn)制字符串 */ public class MD5 { /* * 生成md5 有傳入?yún)?shù)字符串 */ public void generateMD5(String input){ try { //1.初始化MessageDigest信息摘要對象,并指定為MD5不分大小寫都可以 MessageDigest md=MessageDigest.getInstance("md5"); //2.傳入需要計算的字符串更新摘要信息,傳入的為字節(jié)數(shù)組byte[], //將字符串轉(zhuǎn)換為字節(jié)數(shù)組使用getBytes()方法完成 //指定時其字符編碼 為utf-8 md.update(input.getBytes("utf-8")); //3.計算信息摘要digest()方法 //返回值為字節(jié)數(shù)組 byte [] hashCode=md.digest(); //4.將byte[] 轉(zhuǎn)換為找度為32位的16進(jìn)制字符串 //聲明StringBuffer對象來存放最后的值 StringBuffer sb=new StringBuffer(); //遍歷字節(jié)數(shù)組 for(byte b:hashCode){ //對數(shù)組內(nèi)容轉(zhuǎn)化為16進(jìn)制, sb.append(Character.forDigit(b>>4&0xf, 16)); //換2次為32位的16進(jìn)制 sb.append(Character.forDigit(b&0xf, 16)); } System.out.println("加密后的結(jié)果是:"+sb.toString()); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { //聲明加密MD5類的對象 MD5 md5=new MD5(); //使用Scanner來輸入一個字符 Scanner scanner=new Scanner(System.in); System.out.println("請輸入要加密的內(nèi)容:"); String input = scanner.nextLine(); //調(diào)用加密方法 md5.generateMD5(input); } }
結(jié)果:
請輸入要加密的內(nèi)容:
學(xué)習(xí)MD5加密過程
加密后的結(jié)果是:b826cdac46f01dcc8ccc60a76cebf858
第二段代碼:
package test.md5; import java.security.MessageDigest; public class MD5Util { public final static String MD5(String s) { char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; try { byte[] btInput = s.getBytes(); // 獲得MD5摘要算法的 MessageDigest 對象 MessageDigest mdInst = MessageDigest.getInstance("MD5"); // 使用指定的字節(jié)更新摘要 mdInst.update(btInput); // 獲得密文 byte[] md = mdInst.digest(); // 把密文轉(zhuǎn)換成十六進(jìn)制的字符串形式 int j = md.length; char str[] = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; str[k++] = hexDigits[byte0 >>> 4 & 0xf]; str[k++] = hexDigits[byte0 & 0xf]; } return new String(str); } catch (Exception e) { e.printStackTrace(); return null; } } public static void main(String[] args) { System.out.println(MD5Util.MD5("20121221")); System.out.println(MD5Util.MD5("加密")); } }
第三段代碼:MD5加密算法的java實現(xiàn)
package other; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /* * MD5 算法 */ public class MD5 { // 全局?jǐn)?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進(jìn)制字串 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ù)返回值為存放哈希值結(jié)果的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")); } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
MyBatis批量插入/修改/刪除MySql數(shù)據(jù)
這篇文章主要給大家介紹了關(guān)于MyBatis批量插入/修改/刪除MySql數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05Java在Excel中添加水印的實現(xiàn)(單一水印、平鋪水印)
這篇文章主要介紹了Java在Excel中添加水印的實現(xiàn)(單一水印、平鋪水印),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Java Iterator迭代器與foreach循環(huán)代碼解析
這篇文章主要介紹了Java-Iterator迭代器與foreach循環(huán),主要包括Iterator迭代器接口的操作方法和foreach 循環(huán)語法解析,需要的朋友可以參考下2022-04-04java8 stream 由一個list轉(zhuǎn)化成另一個list案例
這篇文章主要介紹了java8 stream 由一個list轉(zhuǎn)化成另一個list案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08spring security中Authority、Role的區(qū)別及說明
這篇文章主要介紹了spring security中Authority、Role的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09Java初學(xué)者問題圖解(動力節(jié)點Java學(xué)院整理)
本文通過圖文并茂的形式給大家介紹了java初學(xué)者問題,非常不錯,具有參考借鑒價值,需要的朋友參考下2017-04-04