美文网首页
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