美文网首页
JDK1.7的BASE64Decoder与BASE64Encod

JDK1.7的BASE64Decoder与BASE64Encod

作者: 催化剂 | 来源:发表于2022-07-06 09:48 被阅读0次

    package com.fpi.epoch.pms.util;

    import sun.misc.BASE64Decoder;

    import sun.misc.BASE64Encoder;

    import javax.crypto.Cipher;

    import javax.crypto.spec.IvParameterSpec;

    import javax.crypto.spec.SecretKeySpec;

    import java.security.Key;

    import java.security.spec.AlgorithmParameterSpec;

    /**

    * 对称加密解密AES算法

    *

    */

    public class AesUtils {

    //private static final Logger logger = LoggerFactory.getLogger(AesUtils.class);

        private static final String TRANSFORMATION ="AES/CBC/PKCS5Padding";

    private static final String ALGORITHM ="AES";

    private static final String CHARSET ="utf-8";

    /**

        * 建议为16或者32位

        */

        private static final String KEY ="IU-YKEYKEYKEYKEY";

    /**

        * 必须16位

        * 初始化向量IV不可以为32位,否则异常java.security.InvalidAlgorithmParameterException: Wrong IV length: must be 16 bytes long

    */

        private static final String IV ="Fpi-Dmp-Fpi-Dmp~";

    /**

        * 加密

        *

        * @param context

        * @return

    */

        public static String encrypt(String context) {

    try {

    byte[]decode = context.getBytes(CHARSET);

    byte[]bytes =createKeyAndIv(decode,Cipher.ENCRYPT_MODE);

    BASE64Encoder base64Encoder =new BASE64Encoder();

    return base64Encoder.encode(bytes);

    }catch (Exception e) {

    //logger.error("AES", e);

            }

    return null;

    }

    /**

        * 解密

        *

        * @param context

        * @return

    */

        public static String decrypt(String context) {

    try {

    BASE64Decoder decoder =new  BASE64Decoder();

    byte[]decode =decoder.decodeBuffer(context);

    byte[]bytes =createKeyAndIv(decode,Cipher.DECRYPT_MODE);

    return new String(bytes,CHARSET);

    }catch (Exception e) {

    //logger.error("AES", e);

            }

    return null;

    }

    /**

        * 获取key & iv

    *

        * @param context

        * @param opmode

        * @return

        * @throws Exception

        */

        public static byte[]createKeyAndIv(byte[] context,int opmode)throws Exception {

    byte[]key =KEY.getBytes(CHARSET);

    byte[]iv =IV.getBytes(CHARSET);

    return cipherFilter(context, opmode,key,iv);

    }

    /**

        * 执行操作

        *

        * @param context

        * @param opmode

        * @param key

        * @param iv

        * @return

        * @throws Exception

        */

        public static byte[]cipherFilter(byte[] context,int opmode,byte[] key,byte[] iv)throws Exception {

    Key secretKeySpec =new SecretKeySpec(key,ALGORITHM);

    AlgorithmParameterSpec ivParameterSpec =new IvParameterSpec(iv);

    Cipher cipher =Cipher.getInstance(TRANSFORMATION);

    cipher.init(opmode,secretKeySpec,ivParameterSpec);

    return cipher.doFinal(context);

    }

    /**

        * 主方法测试

        *

        * @param args

        */

        public static void main(String[] args) {

    String context ="123456";

    System.out.println("元数据" +context);

    String encrypt =encrypt(context);

    System.out.println("加密之后:" +encrypt);

    String decrypt =decrypt(encrypt);

    System.out.println("解密之后:" +decrypt);

    String wt =decrypt("OkDOYrdBTBcq36OKApyAlA==");

    System.out.println("wt=" +wt);

    }

    }

    相关文章

      网友评论

          本文标题:JDK1.7的BASE64Decoder与BASE64Encod

          本文链接:https://www.haomeiwen.com/subject/owaebrtx.html