AES加解密

筑梦帆码
发布于 2024-05-02 / 37 阅读
0

AES加解密


import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;

/**
 * AES加解密
 */
public class AESUtils {

    /**
     * 需为 16字节
     */
    private static final String sKey = "CwcqTxU4EJJpfBR6";
    private static final Logger log = LoggerFactory.getLogger(AESUtils.class);
    /**
     * 加密
     * @param sourceStr 源数据
     * @return
     */
    public static String encrypt(String sourceStr){
        try{
            if(StringUtils.isEmpty(sourceStr))return null;
            byte[] raw = sKey.getBytes(Constants.UTF8);
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/补码方式"
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
            byte[] encrypted = cipher.doFinal(sourceStr.getBytes(StandardCharsets.UTF_8));
            return Base64.encodeBase64String(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }


    /**
     * 解密
     * @param encryptStr 密文数据
     * @return
     */
    public static String decrypt(String encryptStr){
        try{
            if(StringUtils.isEmpty(encryptStr))return null;
            byte[] raw = sKey.getBytes(Constants.UTF8);
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
            //先用base64解密
            byte[] base64Str = Base64.decodeBase64(encryptStr);
            try {
                byte[] original = cipher.doFinal(base64Str);
                String decryptStr = new String(original, StandardCharsets.UTF_8);
                if(StringUtils.isNotEmpty(decryptStr)){
                    return decryptStr;
                }
                return encryptStr;
            } catch (Exception e) {
                log.error("decrypt error, string: " + encryptStr, e);
                return encryptStr;
            }
        }catch (Exception e){e.printStackTrace();}
        return null;
    }



}