package com.changhong.epc.rely.api.tool;
|
import com.changhong.cacsdk.api.MainApi;
|
import com.changhong.cacsdk.entity.CryptEntity;
|
import com.changhong.cacsdk.util.Base64Utils;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.codec.binary.Base64;
|
import sun.misc.BASE64Decoder;
|
import sun.misc.BASE64Encoder;
|
|
import javax.crypto.*;
|
import javax.crypto.spec.IvParameterSpec;
|
import javax.crypto.spec.SecretKeySpec;
|
import java.io.UnsupportedEncodingException;
|
import java.security.InvalidKeyException;
|
import java.security.NoSuchAlgorithmException;
|
import java.security.SecureRandom;
|
|
/*
|
* AES对称加密和解密
|
*/
|
@Slf4j
|
public class CscAesUtils {
|
private static final String KEY_ALGORITHM = "AES";
|
private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";//默认的加密算法
|
|
/**
|
* AES 加密操作
|
*
|
* @param content 待加密内容
|
* @param password 加密密码
|
* @return 返回Base64转码后的加密数据
|
*/
|
public static String encrypt(String content, String password) {
|
try {
|
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);// 创建密码器
|
|
byte[] byteContent = content.getBytes("utf-8");
|
|
cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(password));// 初始化为加密模式的密码器
|
|
byte[] result = cipher.doFinal(byteContent);// 加密
|
|
return Base64.encodeBase64String(result);//通过Base64转码返回
|
} catch (Exception ex) {
|
log.error("AES加密失败:{}", ex.getMessage());
|
}
|
|
return null;
|
}
|
|
/**
|
* AES 解密操作
|
*
|
* @param content
|
* @param password
|
* @return
|
*/
|
public static String decrypt(String content, String password) {
|
|
try {
|
//实例化
|
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
|
|
//使用密钥初始化,设置为解密模式
|
cipher.init(Cipher.DECRYPT_MODE, getSecretKey(password));
|
|
//执行操作
|
byte[] result = cipher.doFinal(Base64.decodeBase64(content));
|
|
return new String(result, "utf-8");
|
} catch (Exception ex) {
|
log.error("AES解密失败:{}", ex.getMessage());
|
}
|
|
return null;
|
}
|
|
/**
|
* 生成加密秘钥
|
*
|
* @return
|
*/
|
private static SecretKeySpec getSecretKey(final String key) {
|
//返回生成指定算法密钥生成器的 KeyGenerator 对象
|
KeyGenerator kg = null;
|
|
try {
|
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
|
random.setSeed(key.getBytes());
|
kg = KeyGenerator.getInstance(KEY_ALGORITHM);
|
|
//AES 要求密钥长度为 128
|
kg.init(128, random);
|
|
//生成一个密钥
|
SecretKey secretKey = kg.generateKey();
|
|
return new SecretKeySpec(secretKey.getEncoded(), KEY_ALGORITHM);// 转换为AES专用密钥
|
} catch (NoSuchAlgorithmException ex) {
|
log.error("AES生成秘钥失败:" + ex.getMessage());
|
}
|
|
return null;
|
}
|
|
public static void main(String[] args) {
|
String Code = "3141bf6b126f4f16";
|
String key = "0123456789ABCDEF";
|
String codE;
|
codE = CscAesUtils.encrypt(Code, key);
|
System.out.println("原文:" + Code);
|
System.out.println("密钥:" + key);
|
System.out.println("密文:" + codE);
|
System.out.println("解密:" + CscAesUtils.decrypt(codE, key));
|
|
System.out.println(
|
CscAesUtils.decrypt("foHgkbudC1IdOvqig+qbpG5lZuAGS1l1mX1tJUlqJcY=", key)
|
);
|
}
|
}
|