項目中常有需求要求不能明文傳送某些關鍵字元,也許會被某些網關被攔截掉,那應該怎麼解決這個問題呢? 字元串轉 base64後的加密與解密 import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; private static Strin ...
項目中常有需求要求不能明文傳送某些關鍵字元,也許會被某些網關被攔截掉,那應該怎麼解決這個問題呢?
字元串轉 base64後的加密與解密
import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; private static String KEY = "12345678901234567890abcd"; /** * 加密 * @param str 字元 * @return */ public static String encodeToBase64ThenDecrypt(String str){ if(StringUtils.isBlank(str)) return ""; BASE64Encoder base64Encoder = new BASE64Encoder(); String encode = base64Encoder.encode(str.getBytes()); return TripleDes.encrypt3DES(encode, KEY); } /** * 解密 * @param decry 字元 * @return */ public static String decodeToBase64ThenDecrypt(String decry) { if(StringUtils.isBlank(decry)) return ""; String base64Str = TripleDes.decrypt3DES(decry, KEY); BASE64Decoder base64Decoder = new BASE64Decoder(); byte[] bytes = new byte[0]; try { bytes = base64Decoder.decodeBuffer(base64Str); } catch (IOException e) { e.printStackTrace(); } return new String(bytes);
TripleDes 3DES加密演算法文件代碼
package com.lanwf.utils; import org.apache.commons.codec.binary.Hex; import org.apache.commons.lang3.StringUtils; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; /** * 採用3DES加密,單des密鑰是8位元組,三重des密鑰就是3*8=24位元組,更加安全 * 即密鑰必須是24位 */ public class TripleDes { private TripleDes(){} private static Cipher DES_CIPHER; static { try { DES_CIPHER = Cipher.getInstance("DESede/ECB/PKCS5Padding"); } catch (Exception e) { e.printStackTrace(); } } /** * 加密 * @param str 明文字元串 * @param key 密鑰(必須24位) * @return */ public static String encrypt3DES(String str, String key) { if(StringUtils.isBlank(str))return null; try { DES_CIPHER.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes("utf-8"), "DESede")); byte[] encryptedData = DES_CIPHER.doFinal(str.getBytes("utf-8")); //轉化為字元串 return Hex.encodeHexString(encryptedData).toUpperCase(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 解密 * @param str 密碼後的密文 * @param key 密鑰(必須24位) * @return */ public static String decrypt3DES(String str, String key) { if(StringUtils.isBlank(str))return null; try { DES_CIPHER.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes("utf-8"), "DESede")); byte[] decryptedData = DES_CIPHER.doFinal(Hex.decodeHex(str.toCharArray())); return new String(decryptedData, "utf-8"); } catch (Exception e) { e.printStackTrace(); } return null; } }
完!!!
* 給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出 和為目標值 target 的那 兩個 整數,並返回它們的數組下標。
*
* 你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素在答案里不能重覆出現。
*
* 你可以按任意順序返回答案。
* @param args
* 輸入:nums = [2,7,11,15], target = 9
* 輸出:[0,1]
* 解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。