用java语言写一个AES算法,使用AES(CBC模式)对数据进行加密或解密。加解密用到的密钥(Key)和密钥偏移量(IV),代码实例类编写。

编程入门 行业动态 更新时间:2024-10-21 13:35:49

用java语言写一个AES算法,使用AES(CBC模式)对数据进行加密或解密。加解密用到的<a href=https://www.elefans.com/category/jswz/34/1771335.html style=密钥(Key)和密钥偏移量(IV),代码实例类编写。"/>

用java语言写一个AES算法,使用AES(CBC模式)对数据进行加密或解密。加解密用到的密钥(Key)和密钥偏移量(IV),代码实例类编写。

以下是一个使用Java编写的AES算法实例,使用AES(CBC模式)对数据进行加密和解密。代码中包括了生成随机密钥和密钥偏移量的方法。

java
Copy code
import javax.crypto.*;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;

public class AESExample {

    private static final String AES_ALGORITHM = "AES";
    private static final String AES_TRANSFORMATION = "AES/CBC/PKCS5Padding";
    private static final int AES_KEY_SIZE = 256;

    public static void main(String[] args) {
        try {
            // 生成随机密钥
            SecretKey secretKey = generateRandomKey();

            // 生成随机密钥偏移量
            byte[] iv = generateRandomIV();

            String plaintext = "Hello, World!";

            // 加密
            String ciphertext = encrypt(plaintext, secretKey, iv);
            System.out.println("加密后的文本:" + ciphertext);

            // 解密
            String decryptedText = decrypt(ciphertext, secretKey, iv);
            System.out.println("解密后的文本:" + decryptedText);
        } catch (NoSuchAlgorithmException | NoSuchPaddingException
                | InvalidKeyException | InvalidAlgorithmParameterException
                | IllegalBlockSizeException | BadPaddingException e) {
            e.printStackTrace();
        }
    }

    // 生成随机密钥
    public static SecretKey generateRandomKey() throws NoSuchAlgorithmException {
        KeyGenerator keyGenerator = KeyGenerator.getInstance(AES_ALGORITHM);
        keyGenerator.init(AES_KEY_SIZE);
        return keyGenerator.generateKey();
    }

    // 生成随机密钥偏移量
    public static byte[] generateRandomIV() {
        SecureRandom secureRandom = new SecureRandom();
        byte[] iv = new byte[16];
        secureRandom.nextBytes(iv);
        return iv;
    }

    // AES加密
    public static String encrypt(String plaintext, SecretKey secretKey, byte[] iv)
            throws NoSuchPaddingException, NoSuchAlgorithmException,
            InvalidAlgorithmParameterException, InvalidKeyException,
            BadPaddingException, IllegalBlockSizeException {
        Cipher cipher = Cipher.getInstance(AES_TRANSFORMATION);
        IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivParameterSpec);
        byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    // AES解密
    public static String decrypt(String ciphertext, SecretKey secretKey, byte[] iv)
            throws NoSuchPaddingException, NoSuchAlgorithmException,
            InvalidAlgorithmParameterException, InvalidKeyException,
            BadPaddingException, IllegalBlockSizeException {
        Cipher cipher = Cipher.getInstance(AES_TRANSFORMATION);
        IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
        cipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpec);
        byte[] encryptedBytes = Base64.getDecoder().decode(ciphertext);
        byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
        return new String(decryptedBytes);
    }
}
上述代码中,generateRandomKey方法用于生成随机密钥,generateRandomIV方法用于生成随机密钥偏移量。encrypt方法使用提供的密钥和密钥偏移量对给定的明文进行加密,返回Base64编码后的密文。decrypt方法使用相同的密钥和密钥偏移量对密文进行解密,并返回解密后的明文。

请注意,上述代码仅供示例目的,实际使用时需要妥善管理密钥和密钥偏移量以确保安全性。

更多推荐

用java语言写一个AES算法,使用AES(CBC模式)对数据进行加密或解密。加解密用到的密钥(Key)和密钥偏移量(IV),代码实例类编写。

本文发布于:2023-12-08 00:53:16,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1672148.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:密钥   算法   实例   语言   模式

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!