Java中MessageDigest來實現(xiàn)數(shù)據(jù)加密的方法
MessageDigest
MessageDigest 類為應(yīng)用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的單向哈希函數(shù),它接收任意大小的數(shù)據(jù),輸出固定長度的哈希值。
MessageDigest 對象開始被初始化。該對象通過使用 update 方法處理數(shù)據(jù)。任何時候都可以調(diào)用 reset 方法重置摘要。一旦所有需要更新的數(shù)據(jù)都已經(jīng)被更新了,應(yīng)該調(diào)用 digest 方法之一完成哈希計算。
對于給定數(shù)量的更新數(shù)據(jù),digest 方法只能被調(diào)用一次。digest 被調(diào)用后,MessageDigest 對象被重新設(shè)置成其初始狀態(tài)。
舉個簡單的md5加密的例子:
package com.company;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MessageDigestTest {
public static void main(String[] args) throws NoSuchAlgorithmException {
String source = "123123";
String md5Str = getMd5(source);
System.out.println(md5Str);
}
/**
* 通過md5進行加密
* @param source 要加密的數(shù)據(jù)
* @return
* @throws NoSuchAlgorithmException
*/
private static String getMd5(String source) throws NoSuchAlgorithmException {
//1.獲取MessageDigest對象
MessageDigest digest = MessageDigest.getInstance("md5");
//2.執(zhí)行加密操作
byte[] bytes = source.getBytes();
//在MD5算法這,得到的目標字節(jié)數(shù)組的特點:長度固定為16
byte[] targetBytes = digest.digest(bytes);
//3.聲明字符數(shù)組
char [] characters = new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//4.遍歷targetBytes
StringBuilder builder = new StringBuilder();
for (byte b : targetBytes) {
//5.取出b的高四位的值
//先把高四位通過右移操作拽到低四位
int high = (b >> 4) & 15;
//6.取出b的低四位的值
int low = b & 15;
//7.以high為下標從characters中取出對應(yīng)的十六進制字符
char highChar = characters[high];
//8.以low為下標從characters中取出對應(yīng)的十六進制字符
char lowChar = characters[low];
builder.append(highChar).append(lowChar);
}
return builder.toString();
}
}
測試結(jié)果:
4297F44B13955235245B2497399D7A93
封裝成工具類:
package com.company;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Tool {
private static ThreadLocal<MD5Tool> md5ToolThreadLocal = new ThreadLocal<>();
private MD5Tool() {
}
/**
* 獲取一個MD5工具實例
*/
public static MD5Tool getInstance() {
if (md5ToolThreadLocal.get() == null) {
md5ToolThreadLocal.set(new MD5Tool());
}
return md5ToolThreadLocal.get();
}
/**
* 通過md5進行加密
*
* @param source 要加密的數(shù)據(jù)
* @return
* @throws NoSuchAlgorithmException
*/
public String getMd5(String source) throws NoSuchAlgorithmException {
//1.獲取MessageDigest對象
MessageDigest digest = MessageDigest.getInstance("md5");
//2.執(zhí)行加密操作
byte[] bytes = source.getBytes();
//在MD5算法這,得到的目標字節(jié)數(shù)組的特點:長度固定為16
byte[] targetBytes = digest.digest(bytes);
//3.聲明字符數(shù)組
char[] characters = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
//4.遍歷targetBytes
StringBuilder builder = new StringBuilder();
for (byte b : targetBytes) {
//5.取出b的高四位的值
//先把高四位通過右移操作拽到低四位
int high = (b >> 4) & 15;
//6.取出b的低四位的值
int low = b & 15;
//7.以high為下標從characters中取出對應(yīng)的十六進制字符
char highChar = characters[high];
//8.以low為下標從characters中取出對應(yīng)的十六進制字符
char lowChar = characters[low];
builder.append(highChar).append(lowChar);
}
return builder.toString();
}
}
到此這篇關(guān)于Java中MessageDigest來實現(xiàn)數(shù)據(jù)加密的方法的文章就介紹到這了,更多相關(guān)MessageDigest 數(shù)據(jù)加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java將文件轉(zhuǎn)成流文件返回給前端詳細代碼實例
Java編程語言提供了強大的文件處理和壓縮能力,下面這篇文章主要給大家介紹了關(guān)于java將文件轉(zhuǎn)成流文件返回給前端的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-07-07
SpringBoot整合Logback日志框架及高并發(fā)下的性能優(yōu)化
在現(xiàn)代的Java應(yīng)用開發(fā)中,日志記錄是不可或缺的一部分,Spring Boot作為目前最流行的Java開發(fā)框架之一,默認集成了Logback作為日志框架,Logback是Log4j的繼任者,具有更高的性能和更豐富的功能,本文將詳細介紹如何在Spring Boot中整合Logback日志框架2025-03-03
使用Prometheus+Grafana的方法監(jiān)控Springboot應(yīng)用教程詳解
這篇文章主要介紹了用Prometheus+Grafana的方法監(jiān)控Springboot應(yīng)用,本文通過實例代碼詳解給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03
idea導(dǎo)入springboot項目沒有maven的解決
這篇文章主要介紹了idea導(dǎo)入springboot項目沒有maven的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
SpringBoot項目War包部署無法注冊到Nacos中的解決
這篇文章主要介紹了SpringBoot項目War包部署無法注冊到Nacos中的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
springboot與vue詳解實現(xiàn)短信發(fā)送流程
隨著人工智能的不斷發(fā)展,機器學(xué)習(xí)這門技術(shù)也越來越重要,很多人都開啟了學(xué)習(xí)機器學(xué)習(xí),本文就介紹了機器學(xué)習(xí)的基礎(chǔ)內(nèi)容2022-06-06

