您好,登錄后才能下訂單哦!
小編這次要給大家分享的是Java中MessageDigest如何實現數據加密,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
MessageDigest
MessageDigest 類為應用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的單向哈希函數,它接收任意大小的數據,輸出固定長度的哈希值。
MessageDigest 對象開始被初始化。該對象通過使用 update 方法處理數據。任何時候都可以調用 reset 方法重置摘要。一旦所有需要更新的數據都已經被更新了,應該調用 digest 方法之一完成哈希計算。
對于給定數量的更新數據,digest 方法只能被調用一次。digest 被調用后,MessageDigest 對象被重新設置成其初始狀態。
舉個簡單的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 要加密的數據 * @return * @throws NoSuchAlgorithmException */ private static String getMd5(String source) throws NoSuchAlgorithmException { //1.獲取MessageDigest對象 MessageDigest digest = MessageDigest.getInstance("md5"); //2.執行加密操作 byte[] bytes = source.getBytes(); //在MD5算法這,得到的目標字節數組的特點:長度固定為16 byte[] targetBytes = digest.digest(bytes); //3.聲明字符數組 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中取出對應的十六進制字符 char highChar = characters[high]; //8.以low為下標從characters中取出對應的十六進制字符 char lowChar = characters[low]; builder.append(highChar).append(lowChar); } return builder.toString(); } }
測試結果:
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 要加密的數據 * @return * @throws NoSuchAlgorithmException */ public String getMd5(String source) throws NoSuchAlgorithmException { //1.獲取MessageDigest對象 MessageDigest digest = MessageDigest.getInstance("md5"); //2.執行加密操作 byte[] bytes = source.getBytes(); //在MD5算法這,得到的目標字節數組的特點:長度固定為16 byte[] targetBytes = digest.digest(bytes); //3.聲明字符數組 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中取出對應的十六進制字符 char highChar = characters[high]; //8.以low為下標從characters中取出對應的十六進制字符 char lowChar = characters[low]; builder.append(highChar).append(lowChar); } return builder.toString(); } }
看完這篇關于Java中MessageDigest如何實現數據加密的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。