java 字符转Base64然后加密

打印 上一主题 下一主题

主题 873|帖子 873|积分 2619

项目中常有需求要求不能明文传送某些关键字符,也许会被某些网关被拦截掉,那应该怎么解决这个问题呢?
字符串转 base64后的加密与解密
  1.    import sun.misc.BASE64Decoder;
  2.    import sun.misc.BASE64Encoder;
  3.     private static String KEY = "12345678901234567890abcd";
  4.     /**
  5.      * 加密
  6.      * @param str 字符
  7.      * @return
  8.      */
  9.     public static String encodeToBase64ThenDecrypt(String str){
  10.         if(StringUtils.isBlank(str)) return "";
  11.         BASE64Encoder base64Encoder = new BASE64Encoder();
  12.         String encode = base64Encoder.encode(str.getBytes());
  13.         return TripleDes.encrypt3DES(encode, KEY);
  14.     }
  15.     /**
  16.      * 解密
  17.      * @param decry 字符
  18.      * @return
  19.      */
  20.     public static String decodeToBase64ThenDecrypt(String decry) {
  21.         if(StringUtils.isBlank(decry)) return "";
  22.         String base64Str = TripleDes.decrypt3DES(decry, KEY);
  23.         BASE64Decoder base64Decoder = new BASE64Decoder();
  24.         byte[] bytes = new byte[0];
  25.         try {
  26.             bytes = base64Decoder.decodeBuffer(base64Str);
  27.         } catch (IOException e) {
  28.             e.printStackTrace();
  29.         }
  30.         return new String(bytes);
  31.    
复制代码
 
  1. TripleDes 3DES加密算法文件代码<br>
复制代码
  1. package com.lanwf.utils;
  2. import org.apache.commons.codec.binary.Hex;
  3. import org.apache.commons.lang3.StringUtils;
  4. import javax.crypto.Cipher;
  5. import javax.crypto.spec.SecretKeySpec;
  6. /**
  7. * 采用3DES加密,单des密钥是8字节,三重des密钥就是3*8=24字节,更加安全
  8. * 即密钥必须是24位
  9. */
  10. public class TripleDes {
  11.     private TripleDes(){}
  12.     private static  Cipher DES_CIPHER;
  13.     static {
  14.         try {
  15.             DES_CIPHER = Cipher.getInstance("DESede/ECB/PKCS5Padding");
  16.         } catch (Exception e) {
  17.             e.printStackTrace();
  18.         }
  19.     }
  20.     /**
  21.      * 加密
  22.      * @param str 明文字符串
  23.      * @param key 密钥(必须24位)
  24.      * @return
  25.      */
  26.     public static String encrypt3DES(String str, String key) {
  27.         if(StringUtils.isBlank(str))return null;
  28.         try {
  29.             DES_CIPHER.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes("utf-8"), "DESede"));
  30.             byte[] encryptedData = DES_CIPHER.doFinal(str.getBytes("utf-8"));
  31.             //转化为字符串
  32.             return Hex.encodeHexString(encryptedData).toUpperCase();
  33.         } catch (Exception e) {
  34.             e.printStackTrace();
  35.         }
  36.         return null;
  37.     }
  38.     /**
  39.      * 解密
  40.      * @param str 密码后的密文
  41.      * @param key 密钥(必须24位)
  42.      * @return
  43.      */
  44.     public static String decrypt3DES(String str, String key) {
  45.         if(StringUtils.isBlank(str))return null;
  46.         try {
  47.             DES_CIPHER.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes("utf-8"), "DESede"));
  48.             byte[] decryptedData = DES_CIPHER.doFinal(Hex.decodeHex(str.toCharArray()));
  49.             return new String(decryptedData, "utf-8");
  50.         } catch (Exception e) {
  51.             e.printStackTrace();
  52.         }
  53.         return null;
  54.     }
  55. }
复制代码
 
  1.  完!!!
复制代码
  1. * 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。<br>*<br>* 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。<br>*<br>* 你可以按任意顺序返回答案。<br>* @param args<br>* 输入:nums = [2,7,11,15], target = 9<br>* 输出:[0,1]<br>* 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

守听

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表