Java隨機字符串與簡單加密工具類詳解
我們都知道Java有一些自帶的Random類,不過我們也可以簡單的自己封裝成工具類,然后用在我們項目ID,驗證碼,以及訂單中。
我們也可以自己寫一個簡單的md5和sha加密工具類來加密一些數(shù)字密碼
一、隨機工具類
1.創(chuàng)建RandomUtils類
我們來新建一個隨機工具類吧,命名為 RandomUtils,其中包含了各種返回定長隨機字符串的方法,也可以根據(jù)想要返回的字母或數(shù)字類型來調(diào)用相應(yīng)的方法
package cn.liu783.vueappjava.myutil; import java.util.Random; import java.util.UUID; public class RandomUtils { public static final String CHAR_ALL = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; public static final String CHAR_ENG = "abcdefghijkllmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; public static final String CHAR_NUM = "0123456789"; /** * 生成定長隨機字符串(數(shù)字) * * @param length 隨機字符串長度 * @return 隨機字符串 */ public static String generateRandomNumber(int length) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) { sb.append(CHAR_NUM.charAt(new Random().nextInt(CHAR_NUM.length()))); } return sb.toString(); } /** * 生成定長隨機字符串(大小寫字母、數(shù)字) * * @param length 隨機字符串長度 * @return 隨機字符串 */ public static String generateRandomNumStr(int length) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) { sb.append(CHAR_ALL.charAt(new Random().nextInt(CHAR_ALL.length()))); } return sb.toString(); } /** * 生成定長隨機字符串(只包含大小寫字母) * * @param length 隨機字符串長度 * @return 隨機字符串 */ public static String generateRandomEng(int length) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) { sb.append(CHAR_ENG.charAt(new Random().nextInt(CHAR_ENG.length()))); } return sb.toString(); } /** * 生成定長隨機字符串(只包含小寫字母) * * @param length 隨機字符串長度 * @return 隨機字符串 */ public static String generateRandomLower(int length) { return generateRandomEng(length).toLowerCase(); } /** * 生成定長隨機字符串(只包含大寫字母) * * @param length 隨機字符串長度 * @return 隨機字符串 */ public static String generateRandomUpper(int length) { return generateRandomEng(length).toUpperCase(); } /** * 生成定長純0字符串 * * @param length 字符串長度 * @return 純0字符串 */ public static String generateZeroString(int length) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) { sb.append('0'); } return sb.toString(); } /** * 根據(jù)數(shù)字生成定長字符串,長度不夠前面補0 * * @param num 數(shù)字 * @param len 字符串長度 * @return 定長的字符串 */ public static String generateZeroPadding(long num, int len) { StringBuffer sb = new StringBuffer(); String strNum = String.valueOf(num); if (len - strNum.length() >= 0) { sb.append(generateZeroString(len - strNum.length())); } else { throw new RuntimeException("將數(shù)字" + num + "轉(zhuǎn)化為長度為" + len + "時發(fā)生異常!"); } sb.append(strNum); return sb.toString(); } /** * 傳入數(shù)字,輸出每個位數(shù)都不相同的字符串 * * @param param * @return 定長的數(shù)字 */ public static int getNotRepeatString(int[] param, int len) { for (int i = param.length; i > 1; i--) { int index = new Random().nextInt(i); int tmp = param[index]; param[index] = param[i - 1]; param[i - 1] = tmp; } int result = 0; if (param.length >= len) { for (int i = 0; i < len; i++) { result = result * 10 + param[i]; } } else { throw new RuntimeException("數(shù)組長度小于輸出長度,一定會有重復(fù),這是個異常!"); } return result; } /** * 獲取UUID字符串,去除橫杠 */ public static String getUUID(){ String s = UUID.randomUUID().toString(); return s.substring(0,8)+s.substring(9,13)+s.substring(14,18)+s.substring(19,23)+s.substring(24); } }
2.測試方法
public static void main(String[] args) { System.out.println("定長隨機數(shù)字:" + generateRandomNumber(10)); System.out.println("定長隨機大小寫字母加數(shù)字:" + generateRandomNumStr(10)); System.out.println("定長隨機大小寫字母:" + generateRandomEng(10)); System.out.println("定長隨機大寫字母:" + generateRandomUpper(10)); System.out.println("定長隨機小寫字母:" + generateRandomLower(10)); System.out.println("定長全0字符串:" + generateZeroString(10)); System.out.println("定長補0字符串:" + generateZeroPadding(9527, 10)); int[] ints01 = {1, 2, 3}; System.out.println("每個位數(shù)都不相同:" + getNotRepeatString(ints01, 3)); System.out.println("UUID-1:" + getUUID()); System.out.println("UUID-2:" + getUUID()); }
我們來看一下輸出結(jié)果
二、加密工具類
1.創(chuàng)建EncryptUtils類
這里是一個簡單的加密工具類命名為 EncryptUtils,我看到了網(wǎng)上有好多好多種加密的方法,不過大家覺得下面的簡單的夠用的話那就可以了
package cn.liu783.vueappjava.myutil; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class EncryptUtils { /** * 加密 * * @param inputText 要加密的內(nèi)容 * @param algorithmName 加密算法名稱:md5,sha-1 * @return */ private static String encrypt(String inputText, String algorithmName) { if (inputText == null || "".equals(inputText.trim())) { throw new IllegalArgumentException("密碼不能為空"); } if (algorithmName == null || "".equals(algorithmName.trim())) { algorithmName = "md5"; } String encryptText = null; try { MessageDigest m = MessageDigest.getInstance(algorithmName); m.update(inputText.getBytes("UTF8")); byte s[] = m.digest(); // m.digest(inputText.getBytes("UTF8")); return getHex(s); } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) { e.printStackTrace(); } return encryptText; } /** * 返回十六進制 */ private static String getHex(byte[] arr) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < arr.length; ++i) { sb.append(Integer.toHexString((arr[i] & 0xFF) | 0x100).substring(1, 3)); } return sb.toString(); } /** * 二次加密 */ public static String twoMd5Sha(String inputText) { return sha(md5(inputText)); } /** * md5加密 */ public static String md5(String inputText) { return encrypt(inputText, "md5"); } /** * sha加密 */ public static String sha(String inputText) { return encrypt(inputText, "sha-1"); } }
2.測試加密方法
來分別調(diào)用一下md5和sha看一下不同的加密結(jié)果
public static void main(String[] args) { // md5加密測試 String md5_1 = md5("123456"); // sha加密測試 String sha_1 = sha("123456"); // 二次加密 String res = twoMd5Sha("123456"); System.out.println("sha加密:" + sha_1 + "\nmd5加密:" + md5_1 + "\n二次加密:" + res); }
看一下結(jié)果吧
總結(jié)
以上這些代碼其實都是挺簡單的,我們以后也可以慢慢來做些更加復(fù)雜的處理。
這些僅為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot前后端交互、全局異常處理之后端異常信息拋到前端顯示彈窗
Spring Boot是一個用于構(gòu)建獨立的、基于生產(chǎn)級別的Spring應(yīng)用程序的框架,下面這篇文章主要給大家介紹了關(guān)于SpringBoot前后端交互、全局異常處理之后端異常信息拋到前端顯示彈窗的相關(guān)資料,需要的朋友可以參考下2024-08-08idea配置全局變量Jdk、maven倉庫以及maven詳解(全文圖解)
這篇文章主要給大家介紹了關(guān)于idea配置全局變量Jdk、maven倉庫以及maven的相關(guān)資料,在配置JDK和Maven之前,需要確保已經(jīng)正確安裝了JDK和Maven,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2024-01-01Springboot整合Mybatis傳值的常用方式總結(jié)
今天給大家?guī)淼氖顷P(guān)于Springboot的相關(guān)知識,文章圍繞著Springboot整合Mybatis傳值的常用方式展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下2021-06-06原生java代碼實現(xiàn)碼云第三方驗證登錄的示例代碼
這篇文章主要介紹了原生java代碼實現(xiàn)碼云第三方驗證登錄的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04使用@ConfigurationProperties實現(xiàn)類型安全的配置過程
這篇文章主要介紹了使用@ConfigurationProperties實現(xiàn)類型安全的配置過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02