1. 程式人生 > >JAVA中簡單的MD5加密類(MD5Utils)

JAVA中簡單的MD5加密類(MD5Utils)

com rgs api body md5 mex 可能 title 思路

MD5加密分析: 技術分享圖片 技術分享圖片 JDK API: 技術分享圖片 技術分享圖片 獲取對象的API: 技術分享圖片 技術分享圖片 加密的API: 技術分享圖片 技術分享圖片 技術分享圖片
 1 package cn.utils;
 2 
 3 import java.security.MessageDigest;
 4 import java.security.NoSuchAlgorithmException;
 5 
 6 /**
 7  * @author CQY13 MD5加密工具類
 8  */
 9 public class MD5Utils {
10 
11     /**
12      * 獲取MD5加密
13      * 
14      * @param pwd
15
* 需要加密的字符串 16 * @return String字符串 加密後的字符串 17 */ 18 public static String getPwd(String pwd) { 19 try { 20 // 創建加密對象 21 MessageDigest digest = MessageDigest.getInstance("md5"); 22 23 // 調用加密對象的方法,加密的動作已經完成 24 byte[] bs = digest.digest(pwd.getBytes());
25 // 接下來,我們要對加密後的結果,進行優化,按照mysql的優化思路走 26 // mysql的優化思路: 27 // 第一步,將數據全部轉換成正數: 28 String hexString = ""; 29 for (byte b : bs) { 30 // 第一步,將數據全部轉換成正數: 31 // 解釋:為什麽采用b&255 32 /* 33 * b:它本來是一個byte類型的數據(1個字節) 255:是一個int類型的數據(4個字節)
34 * byte類型的數據與int類型的數據進行運算,會自動類型提升為int類型 eg: b: 1001 1100(原始數據) 35 * 運算時: b: 0000 0000 0000 0000 0000 0000 1001 1100 255: 0000 36 * 0000 0000 0000 0000 0000 1111 1111 結果:0000 0000 0000 0000 37 * 0000 0000 1001 1100 此時的temp是一個int類型的整數 38 */ 39 int temp = b & 255; 40 // 第二步,將所有的數據轉換成16進制的形式 41 // 註意:轉換的時候註意if正數>=0&&<16,那麽如果使用Integer.toHexString(),可能會造成缺少位數 42 // 因此,需要對temp進行判斷 43 if (temp < 16 && temp >= 0) { 44 // 手動補上一個“0” 45 hexString = hexString + "0" + Integer.toHexString(temp); 46 } else { 47 hexString = hexString + Integer.toHexString(temp); 48 } 49 } 50 return hexString; 51 } catch (NoSuchAlgorithmException e) { 52 // TODO Auto-generated catch block 53 e.printStackTrace(); 54 } 55 return ""; 56 } 57 58 /** 59 * @param args 60 */ 61 public static void main(String[] args) { 62 String pwd = MD5Utils.getPwd("abc"); 63 System.out.println(pwd); 64 } 65 66 }
技術分享圖片

技術分享圖片

技術分享圖片

JAVA中簡單的MD5加密類(MD5Utils)