欢迎访问宙启技术站
智能推送

使用Java实现AES加密算法

发布时间:2023-07-31 06:54:13

AES(Advanced Encryption Standard)是一种对称密钥加密算法,是目前应用广泛的对称加密算法之一。下面是使用Java实现AES加密算法的简单示例:

首先,需要导入Java中的相关包:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;

然后,创建一个AESUtil工具类,用于加密和解密操作:

public class AESUtil {

    private static final String DEFAULT_CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";

    /**
     * AES加密操作
     *
     * @param content 需要加密的内容
     * @param key     加密密钥
     * @param iv      初始化向量
     * @return 返回Base64转码后的加密数据
     */
    public static String encrypt(String content, String key, String iv) {
        try {
            // 创建AES的Key生产者
            KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
            keyGenerator.init(128, new SecureRandom(key.getBytes()));

            // 根据用户密码生成一个密钥
            SecretKey secretKey = keyGenerator.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();

            // 根据指定的字节数组和算法构造一个密钥
            SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");

            // 创建密码器
            Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
            IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes());

            // 初始化加密器
            cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);

            byte[] byteContent = content.getBytes("utf-8");
            byte[] result = cipher.doFinal(byteContent);

            // 将加密后的数据转换成字符串并进行Base64编码
            return Base64.encodeToString(result, Base64.DEFAULT);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * AES解密操作
     *
     * @param content 需要解密的内容
     * @param key     解密密钥
     * @param iv      初始化向量
     * @return 返回解密后的数据
     */
    public static String decrypt(String content, String key, String iv) {
        try {
            byte[] encrypted = Base64.decode(content, Base64.DEFAULT);

            // 创建AES的Key生产者
            KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
            keyGenerator.init(128, new SecureRandom(key.getBytes()));

            // 根据用户密码生成一个密钥
            SecretKey secretKey = keyGenerator.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();

            // 根据指定的字节数组和算法构造一个密钥
            SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");

            // 创建密码器
            Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
            IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes());

            // 初始化解密器
            cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);

            byte[] result = cipher.doFinal(encrypted);

            return new String(result, "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

接下来,可以在Java主程序中调用AESUtil进行加密和解密操作:

public class Main {
    public static void main(String[] args) {
        String content = "Hello, AES!";
        String key = "1234567890abcdef";
        String iv = "1234567890abcdef";

        // 使用AESUtil进行加密
        String encrypted = AESUtil.encrypt(content, key, iv);
        System.out.println("加密后的内容:" + encrypted);

        // 使用AESUtil进行解密
        String decrypted = AESUtil.decrypt(encrypted, key, iv);
        System.out.println("解密后的内容:" + decrypted);
    }
}

以上就是使用Java实现AES加密算法的简单示例。当然,实际应用中可能需要更复杂的密钥管理机制,以及更严格的加解密流程。此示例提供了一个基本的框架,可以根据具体需求进行调整和优化。