Java实现AES加密算法的简单示例分享

  

那么我将详细讲解“Java实现AES加密算法的简单示例分享”的完整攻略,包括实现步骤,示例说明等。

第一步:引入依赖

Java实现AES加密算法需要引入如下两个依赖:

<dependency>
    <groupId>javax.crypto</groupId>
    <artifactId>javax.crypto-api</artifactId>
    <version>1.1</version>
</dependency>
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.68</version>
</dependency>

第二步:生成密钥

在Java实现AES加密算法之前,需要生成一个密钥,如下所示:

KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128);
SecretKey key = keyGen.generateKey();

第三步:加密

使用上一步生成的密钥进行加密,如下所示:

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encrypted = cipher.doFinal(input.getBytes());

其中,input是需要加密的字符串,encrypted是加密后的字节数组。

第四步:解密

使用同样的密钥进行解密,如下所示:

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding", "BC");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decrypted = cipher.doFinal(encrypted);

其中,encrypted是加密后的字节数组,decrypted是解密后的字节数组。

示例说明

示例一:加密字符串

下面给出一个加密字符串的例子:

import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.Cipher;

import org.bouncycastle.jce.provider.BouncyCastleProvider;

import java.security.Security;
import java.security.NoSuchAlgorithmException;

public class Main {
    public static void main(String[] args) throws Exception {
        Security.addProvider(new BouncyCastleProvider());

        String input = "Hello, World!";
        KeyGenerator keyGen = KeyGenerator.getInstance("AES");
        keyGen.init(128);
        SecretKey key = keyGen.generateKey();

        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding", "BC");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] encrypted = cipher.doFinal(input.getBytes());

        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] decrypted = cipher.doFinal(encrypted);

        System.out.println(new String(encrypted));
        System.out.println(new String(decrypted));
    }
}

在上述例子中,我们使用了一个128位长度的密钥,将字符串"Hello, World!"进行加密和解密。

示例二:加密文件

下面给出一个加密文件的例子:

import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.Cipher;

import org.bouncycastle.jce.provider.BouncyCastleProvider;

import java.security.Security;
import java.security.NoSuchAlgorithmException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.File;

public class Main {
    public static void main(String[] args) throws Exception {
        Security.addProvider(new BouncyCastleProvider());

        File inputFile = new File("input.txt");
        File encryptedFile = new File("encrypted.txt");
        File decryptedFile = new File("decrypted.txt");

        KeyGenerator keyGen = KeyGenerator.getInstance("AES");
        keyGen.init(128);
        SecretKey key = keyGen.generateKey();

        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding", "BC");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        Files.write(Paths.get(encryptedFile.getAbsolutePath()), cipher.doFinal(Files.readAllBytes(Paths.get(inputFile.getAbsolutePath()))));

        cipher.init(Cipher.DECRYPT_MODE, key);
        Files.write(Paths.get(decryptedFile.getAbsolutePath()), cipher.doFinal(Files.readAllBytes(Paths.get(encryptedFile.getAbsolutePath()))));
    }
}

在上述例子中,我们使用了同样的128位长度的密钥,将文件"input.txt"进行加密和解密,并输出加密后的文件"encrypted.txt"和解密后的文件"decrypted.txt"。

希望这些示例可以帮助您快速掌握Java实现AES加密算法。

相关文章