說明:最近碰到一個需求,網絡請求,傳遞json的時候,必須加密,對字符串加密,然后前端去解密字符串,然后解析json,展示數據,可逆
step1: Md5加密方式
package com.example.iosdialogdemo;import java.security.MessageDigest;/*** MD5方式加密字符串生成32位碼,并解密還原字符串內容* 且MD5加密生成的32位碼是唯一且不變的,** @author zhangkuankuan* @version Id: MD5Test.java, v 0.1 2022/08/17 17:01 zhangkuankuan Exp $$*/
public class MD5Test {/*** 生成32位碼* @param s - 需要加密的字符串* @return String 32位碼*/public final static String MD5(String s) {try {byte[] btInput = s.getBytes();MessageDigest mdInst = MessageDigest.getInstance("MD5");mdInst.update(btInput);byte[] md = mdInst.digest();StringBuffer sb = new StringBuffer();for (int i = 0; i < md.length; i++) {int val = ((int) md[i]) & 0xff;if (val < 16)sb.append("0");sb.append(Integer.toHexString(val));}return sb.toString();} catch (Exception e) {return null;}}/*** 加密解密算法 執行一次加密,兩次解密 (可逆加解密算法)** @param inStr - 需要加密的字符串* @return String 解密數據*/public static String JM(String inStr) {char[] a = inStr.toCharArray();for (int i = 0; i < a.length; i++) {a[i] = (char) (a[i] ^ 't');}String k = new String(a);return k;}/*** 測試主函數*/public static void main(String[] args) {String phone = "14729795483";//9a9338ea65157723fb60eb4970a20be8System.out.println("原始:" + phone);System.out.println("MD5后:" + MD5(phone));System.out.println("(可逆)加密的:" + JM(phone));//一次調用加密System.out.println("(可逆)解密的:" + JM(JM(phone)));//兩次調用解密String password = "*4521zxlk";//122159007aeb0c7bdef07055f9930464System.out.println("原始:" + password);System.out.println("MD5后:" + MD5(password));System.out.println("(可逆)加密的:" + JM(password));//一次調用加密System.out.println("(可逆)解密的:" + JM(JM(password)));//兩次調用解密}
}
step2: Byte64加密方式
package com.example.iosdialogdemo;import java.util.Base64;/*** Base64是網絡上最常見的用于傳輸8Bit字節代碼的編碼方式之一。** @author zhenye 2018/8/22*/
public class Base64Utils {public static void main(String[] args) {String jsonString = "14729795483";//9a9338ea65157723fb60eb4970a20be8String aaa = Base64Utils.encode(jsonString);System.out.println("原始的長度:" +jsonString.length());//一次調用加密System.out.println("(可逆)加密的長度:" + aaa.length());//一次調用加密System.out.println("(可逆)加密的:" +aaa);//一次調用加密String bbb = Base64Utils.decode(aaa);System.out.println("(可逆)解密的:" + bbb);//兩次調用解密}/*** Base64編碼* @param message 待Base64編碼的字符串* @return 編碼后的字符串*/public static String encode(String message){if (message == null){return null;}byte[] bytes = message.getBytes();byte[] result = Base64.getEncoder().encode(bytes);return new String(result);}/*** Base64編碼* @param bytes 待Base64編碼的數據* @return 編碼后的字符串*/public static byte[] encode(byte[] bytes){return Base64.getEncoder().encode(bytes);}/*** Base64解碼* @param message 待Base64解碼的字符串* @return 解碼后的數據*/public static String decode(String message){if (message == null){return null;}byte[] bytes = message.getBytes();byte[] result = Base64.getDecoder().decode(bytes);return new String(result);}/*** Base64解碼* @param bytes 待Base64解碼的數據* @return 解碼后的數據*/public static byte[] decode(byte[] bytes){return Base64.getDecoder().decode(bytes);}}
end