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.
<think>好的,我现在需要帮助用户寻找AES加密工具下载。首先,用户的问题是关于AES加密工具的下载,但提供的引用内容中提到了ESP32的Flash加密、安全启动工具,以及Java的AES512实现。可能需要结合这些信息,但用户主要需求是找到AES工具。 先看看引用内容。引用2提到使用AES-128加密文件,并测试错误传播。引用5介绍了Java的AES512加密算法。引用1、3、4涉及ESP32的加密工具,如espsecure.py和Flash下载工具。这些可能都是相关的,但用户可能需要通用的AES工具。 用户可能需要的工具类型包括命令行工具、编程库、或图形界面工具。例如,OpenSSL是常用的命令行工具,支持AES加密。另外,Python的cryptography库、Java的AES实现(如引用5提到的)也可能适用。还有像VeraCrypt这样的文件加密工具。 需要检查引用中是否有直接相关的工具。引用1提到espsecure.py,这是ESP32专用的,可能不是用户需要的通用工具。引用3和4提到的Flash下载工具可能也是针对ESP32的。引用2中的练习可能使用OpenSSL或类似工具进行AES加密。 所以,回答应该包括多种类型的AES工具,如OpenSSL、Python库、在线工具、VeraCrypt等,并提到ESP32相关工具作为补充,但明确指出它们的特定用途。同时提醒用户注意密钥管理和安全下载来源。 最后,生成相关问题时要涵盖工具选择、使用OpenSSL的步骤、在线工具的安全性、文件加密方法及ESP32工具的区别。确保引用正确,例如引用2和5可能与AES直接相关,引用1、3、4涉及特定硬件工具。</think>### AES加密工具推荐及下载方式 以下是几种常用的AES加密工具分类及获取方式,结合加密强度、应用场景和安全建议: 1. **OpenSSL(命令行工具)** - 支持算法:AES-128/192/256(CBC、ECB、CTR等模式) - 下载方式: - Linux/macOS:通过系统包管理器安装(如`apt install openssl`或`brew install openssl`) - Windows:从[OpenSSL官网](https://slproweb.com/products/Win32OpenSSL.html)下载预编译包 - 使用示例: ```bash openssl enc -aes-256-cbc -in plaintext.txt -out ciphertext.bin -K [密钥] -iv [初始化向量] ``` 2. **Python Cryptography库** - 支持算法:AES-GCM、AES-CBC等(符合FIPS 140-2标准) - 安装命令: ```bash pip install cryptography ``` - 代码示例(CBC模式): ```python from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes cipher = Cipher(algorithms.AES(key), modes.CBC(iv)) encryptor = cipher.encryptor() ciphertext = encryptor.update(plaintext) + encryptor.finalize() ``` 3. **在线工具(临时用途)** - [Cryptii](https://cryptii.com/):支持AES可视化加解密(需注意**不推荐处理敏感数据**) - 特点:提供Base64/Hex编码转换,支持多模式(ECB/CBC/CTR) 4. **文件加密工具** - VeraCrypt(跨平台): - 下载地址:[VeraCrypt官网](https://www.veracrypt.fr/) - 支持AES-256与Twofish/Serpent组合加密 - 7-Zip(含AES-256压缩加密): - 官网:[www.7-zip.org](https://www.7-zip.org/) 5. **硬件相关工具** - ESP32加密工具(如引用1/3/4所述): - `espsecure.py`:用于ESP32固件加解密 - 获取方式:安装[ESP-IDF框架](https://docs.espressif.com/projects/esp-idf/)后自动包含 - 使用场景:物联网设备固件加密[^1][^3][^4] ### 安全注意事项 1. 密钥管理:推荐使用密钥派生函数(如PBKDF2)生成密钥,避免硬编码 2. 模式选择:优先选择认证加密模式(如AES-GCM),避免ECB模式[^2] 3. 固件加密:物联网开发可参考ESP32的Flash加密流程[^1][^3] 4. 算法强度:常规场景使用AES-256,资源受限设备可考虑AES-128[^5]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值