千家信息网

java实现AES方式加密

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockS
千家信息网最后更新 2025年02月02日java实现AES方式加密
import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.NoSuchPaddingException;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;import org.apache.commons.codec.binary.Base64;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import java.net.URLEncoder;import java.security.InvalidAlgorithmParameterException;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;public class AESUtil {    private static final String IV_STRING = "sdf4ddfsFD86Vdf2";    private static final String encoding = "UTF-8";    public static String encryptAES(String content, String key)            throws InvalidKeyException, NoSuchAlgorithmException,            NoSuchPaddingException, UnsupportedEncodingException,            InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException {        byte[] byteContent = content.getBytes(encoding);        // 注意,为了能与 iOS 统一        // 这里的 key 不可以使用 KeyGenerator、SecureRandom、SecretKey 生成        byte[] enCodeFormat = key.getBytes(encoding);        SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");        byte[] initParam = IV_STRING.getBytes(encoding);        IvParameterSpec ivParameterSpec = new IvParameterSpec(initParam);        // 指定加密的算法、工作模式和填充方式        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);        byte[] encryptedBytes = cipher.doFinal(byteContent);        // 同样对加密后数据进行 base64 编码        String base64 = new Base64().encodeToString(encryptedBytes);        //进行url编码 去掉= ? &        return URLEncoder.encode(base64,encoding);    }    public static String decryptAES(String content, String key)            throws InvalidKeyException, NoSuchAlgorithmException,            NoSuchPaddingException, InvalidAlgorithmParameterException,            IllegalBlockSizeException, BadPaddingException, IOException {        //URL解码        content = URLDecoder.decode(content,encoding);        // base64 解码        byte[] encryptedBytes = Base64.decodeBase64(content);        byte[] enCodeFormat = key.getBytes(encoding);        SecretKeySpec secretKey = new SecretKeySpec(enCodeFormat, "AES");        byte[] initParam = IV_STRING.getBytes(encoding);        IvParameterSpec ivParameterSpec = new IvParameterSpec(initParam);        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");        cipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpec);        byte[] result = cipher.doFinal(encryptedBytes);        return new String(result, encoding);    }        public static void main(String[] args) throws Exception {    JSONObject json = new JSONObject();    json.put("custNum", "111111");    /*json.put("name", "张三");    json.put("cityCode", "100001");    json.put("cityName", "北京市");    json.put("mobileNo", "15651876590");*/        String content = json.toJSONString();        System.out.println("加密前:" + content);        String key = "djadiKJdj49dFJLd";        System.out.println("加密密钥和解密密钥:" + key);        String encrypt = encryptAES(content, key);        System.out.println("加密后:" + encrypt);        String decrypt = decryptAES(encrypt , key);        System.out.println("解密后:" + decrypt);    }}


0