AES加密工具

本文整理了AES加密工具的相关内容,旨在消除之前的使用困惑,提供清晰的加密步骤和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AES加密工具 之前有些坑在里面,现在整理一下,条理清晰点


import android.text.TextUtils;
import android.util.Base64;

import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.Provider;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

/**
 * AES 加密工具
 */
public class AESUtils {
   
   
    /**
     * 算法/模式/填充
     * 加密模式(Cipher Mode)有CBC、ECB、CTR、OFB、CFB五种。
     * 初始向量Iv(Initialization Vector),使用除ECB以外的其他加密模式均需要传入一个初始向量,其大小与块大小相等,
     * AES块大小是128bit,所以Iv的长度是16字节,秘钥也要是16字节,初始向量可以加强算法强度。
     **/

    /**
     * 加密算法
     */
    private static final String Algorithm_AES = "AES";//AES算法
    private static final String Algorithm_DES = "DES";//DES算法

    /**
     * 加密模式
     */
    private static final String CipherMode_CBC_PKCS5 = "AES/CBC/PKCS5Padding";
    private static final String CipherMode_ECB_PKCS5 = "AES/ECB/PKCS5Padding";

    private static final String CipherMode_CBC_PKCS7 = "AES/CBC/PKCS7Padding";
    private static final String CipherMode_ECB_PKCS7 = "AES/ECB/PKCS7Padding";


    public static String encryptAES_ECB7_2Base64(String contentStr, String key) {
   
   
        return encryptAES2Base64(contentStr, key, CipherMode_ECB_PKCS7, null);
    }

    public static String decryptBase64AES_ECB7(String base64Str, String key) {
   
   
        return decryptBase64AES(base64Str, key, CipherMode_ECB_PKCS7, null);
    }

    /**
     * AES加密 输出base64字符串
     *
     * @param content        加密内容
     * @param key            秘钥 长度16
     * @param transformation 加密模式  例:AES/CBC/PKCS5Padding
     * @param iv             偏移量 长度16 ,可选 ,除ECB外 都需要加
     * @return
     */
    public static String encryptAES2Base64(String content, String key, String transformation, String iv) {
   
   
        if (TextUtils.isEmpty(content)) return "";
        try {
   
   
            key = create128BitsKey(key);//截取key 16位
            byte[] strByte = content.getBytes("UTF-8");
            byte[] keyByte = key.getBytes("UTF-8");
            byte[] ivByte = null;
            if (!TextUtils.isEmpty(iv)) {
   
   
                ivByte = create128BitsIV(iv).getBytes("UTF-8");
            }
            byte[] result = encryptAES(strByte, keyByte, transformation, ivByte);//AES加密

            return Base64.encodeToString(result, Base64.NO_WRAP);//要进行base64再一次加密 NO_WRAP不带换行符 DEFAULT带
        } catch (UnsupportedEncodingException e) {
   
   
            e.printStackTrace();
        }
        return null;
    }


    /**
     * AES解密  输入base64字符串
     *
     * @param base64Str      加密内容
     * @param key            秘钥 长度16
     * @param transformation 加密模式  例:AES/CBC/PKCS5Padding
     * @param iv             偏移量 长度16 ,可选 ,除ECB外 都需要加
     * @return
     */
    public static String decryptBase64AES(String base64Str, String key, String transformation, String iv) {
   
   
        if (TextUtils.isEmpty(base64Str)) return "";
        try {
   
   
            key = create128BitsKey(key);//截取key 16位

            byte[] strByte = Base64.decode(base64Str, Base64.NO_WRAP);//要先base64解密 NO_WRAP不带换行符 DEFAULT带

            byte[] keyByte = key.getBytes("UTF-8");
            byte[] ivByte = null;
            if (!TextUtils.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值