Java AES加密解密工具类IV RAW

在开发中,数据加密是一个非常重要的安全措施。AES(Advanced Encryption Standard)是一种常用的对称加密算法,通过AES加密可以保护我们的数据免受未经授权的访问。在Java中,我们可以使用AES加密算法来对数据进行加密和解密操作。

AES加密算法简介

AES是一种对称加密算法,它支持128位、192位和256位密钥长度,其中128位密钥长度被广泛使用。AES加密算法采用分组密码的方式,将明文数据按照固定长度(128位)划分成若干个块,每个块独立进行加密操作。

AES加密算法使用一个称为初始化向量(IV)的随机数来增强加密的安全性。IV是一个固定长度的随机数,在加密和解密过程中必须保持一致。

Java中使用AES加密解密

在Java中,我们可以使用javax.crypto包下的Cipher类来实现AES加密和解密操作。下面是一个简单的Java工具类,用于实现AES加密和解密的功能,并使用IV RAW模式来增加安全性。

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class AESUtils {

    private static final String transformation = "AES/CBC/PKCS5Padding";
    private static final String algorithm = "AES";

    public static String encrypt(String key, String initVector, String value) {
        try {
            IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));
            SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), algorithm);

            Cipher cipher = Cipher.getInstance(transformation);
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);

            byte[] encrypted = cipher.doFinal(value.getBytes());

            return Base64.getEncoder().encodeToString(encrypted);
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        return null;
    }

    public static String decrypt(String key, String initVector, String encrypted) {
        try {
            IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));
            SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), algorithm);

            Cipher cipher = Cipher.getInstance(transformation);
            cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);

            byte[] original = cipher.doFinal(Base64.getDecoder().decode(encrypted));

            return new String(original);
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        return null;
    }
}

在使用该工具类时,我们需要传入加密密钥、初始化向量以及需要加密的字符串。下面是一个示例代码:

public class Main {
    public static void main(String[] args) {
        String key = "aesEncryptionKey";
        String initVector = "encryptionIntVec";
        String value = "Hello, World!";

        String encrypted = AESUtils.encrypt(key, initVector, value);
        System.out.println("Encrypted: " + encrypted);

        String decrypted = AESUtils.decrypt(key, initVector, encrypted);
        System.out.println("Decrypted: " + decrypted);
    }
}

甘特图示例

下面是一个使用mermaid语法绘制的甘特图示例,展示了数据加密的流程:

gantt
    title 数据加密流程
    dateFormat  YYYY-MM-DD

    section 加密过程
    任务1           :done, a1, 2022-01-01, 3d
    任务2           :done, a2, after a1, 2d
    任务3           :done, b1, 2022-01-06, 3d
    任务4           :done, b2, after b1, 2d

    section 解密过程
    任务5           :active, c1, 2022-01-11, 3d
    任务6           :c2, after c1, 2d

旅行图示例

下面是一个使用mermaid语法绘制的旅行图示例,展示了数据加密的整个过程:

journey
    title 数据加密过程
    section 加密
    加密数据          : 数据加密
    存储密钥          : 存储加密密钥
    安全传输          : 在网络中安全传输