欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java中AES文件加解密

程序员文章站 2022-06-28 16:28:46
简要介绍...

简要介绍

AES是一种对称的加密算法,可基于相同的密钥进行加密和解密。AES可以使用128、192、和256位密钥,并且用128位分组加密和解密数据。下边对AES的文件加密进行示例。


AES加解密

// 加解密核心代码
private static void aesFile(File plainFile, File cipherFile, byte[] key, boolean isEncrypt) throws Exception {
    // 获取 AES 密码器
    Cipher cipher = Cipher.getInstance(ALGORITHM);
    // 生成密钥对象
    SecretKey secKey = generateKey(key);
    // 初始化密码器
    cipher.init(isEncrypt ? Cipher.ENCRYPT_MODE : Cipher.DECRYPT_MODE, secKey);
    // 加密/解密数据
    InputStream in = null;
    OutputStream out = null;
    try {
        if (isEncrypt) {
            // 加密: 明文文件为输入, 密文文件为输出
            in = new FileInputStream(plainFile);
            out = new FileOutputStream(cipherFile);
        } else {
            // 解密: 密文文件为输入, 明文文件为输出
            in = new FileInputStream(cipherFile);
            out = new FileOutputStream(plainFile);
        }
        byte[] buf = new byte[1024];
        int len;
        // 循环读取数据 加密/解密
        while ((len = in.read(buf)) != -1) {
            out.write(cipher.update(buf, 0, len));
        }
        out.write(cipher.doFinal());    // 最后需要收尾
        out.flush();
    } finally {
        IOUtils.closeIO(in);
        IOUtils.closeIO(out);
    }
}

// 加密调用
public static void encryptFile(File plainIn, File cipherOut, byte[] key) throws Exception {
    aesFile(plainIn, cipherOut, key, true);
}

// 解密调用
public static void decryptFile(File cipherIn, File plainOut, byte[] key) throws Exception {
    aesFile(plainOut, cipherIn, key, false);
}

秘钥对象的生成

将输入的秘钥,如:aabbc 转换成128位

private static SecretKey generateKey(byte[] key) throws Exception {
    // 创建安全随机数生成器
    SecureRandom random = SecureRandom.getInstance(RNG_ALGORITHM);
    // 设置 密钥key的字节数组 作为安全随机数生成器的种子
    random.setSeed(key);
    // 创建 AES算法生成器
    KeyGenerator gen = KeyGenerator.getInstance(ALGORITHM);
    // 初始化算法生成器
    gen.init(KEY_SIZE, random);
    // 生成 AES密钥对象
    return gen.generateKey();
}

用到的常量

/**
 * 密钥长度: 128, 192 or 256
 */
private static final int KEY_SIZE = 128;
/**
 * 加密/解密算法名称
 */
private static final String ALGORITHM = "AES";
/**
 * 随机数生成器(RNG)算法名称
 */
private static final String RNG_ALGORITHM = "SHA1PRNG";

本文对网上相关进行整理, 只是方便自己日后翻阅!!!

本文地址:https://blog.csdn.net/weixin_40145819/article/details/109891485

相关标签: Java 加密解密