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)文章
詳解springboot整合ehcache實現(xiàn)緩存機(jī)制
這篇文章主要介紹了詳解springboot整合ehcache實現(xiàn)緩存機(jī)制,ehcache提供了多種緩存策略,主要分為內(nèi)存和磁盤兩級,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01
Java基礎(chǔ)之Comparable與Comparator概述
這篇文章主要介紹了Java基礎(chǔ)之Comparable與Comparator詳解,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04
IntelliJ IDEA設(shè)置顯示內(nèi)存指示器和設(shè)置內(nèi)存大小的方法
這篇文章主要介紹了IntelliJ IDEA設(shè)置顯示內(nèi)存指示器和設(shè)置內(nèi)存大小的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
Java 客戶端向服務(wù)端上傳mp3文件數(shù)據(jù)的實例代碼
這篇文章主要介紹了Java 客戶端向服務(wù)端上傳mp3文件數(shù)據(jù)的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-09-09
一文講解如何解決Java中的IllegalArgumentException異常
這篇文章主要給大家介紹了關(guān)于如何解決Java中IllegalArgumentException異常的相關(guān)資料,IllegalArgumentException是Java中的一個標(biāo)準(zhǔn)異常類,通常在方法接收到一個不合法的參數(shù)時拋出,需要的朋友可以參考下2024-03-03
IDEA中springboot的熱加載thymeleaf靜態(tài)html頁面的方法
這篇文章主要介紹了IDEA中springboot的熱加載thymeleaf靜態(tài)html頁面的方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07
Java網(wǎng)絡(luò)編程之簡單的服務(wù)端客戶端應(yīng)用實例
這篇文章主要介紹了Java網(wǎng)絡(luò)編程之簡單的服務(wù)端客戶端應(yīng)用,以實例形式較為詳細(xì)的分析了java網(wǎng)絡(luò)編程的原理與服務(wù)器端客戶端的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-04-04

