Java 实现对称加密算法

  

Java 实现对称加密算法攻略

对称加密算法指使用同一个密钥进行加解密的加密算法。本攻略将介绍 Java 如何实现对称加密算法,主要包括以下内容:

  1. 对称加密算法的种类
  2. Java 中实现对称加密的常用类库
  3. 对称加密算法的实现步骤
  4. 示例说明

对称加密算法的种类

对称加密算法包括 DES、3DES、AES 等常用算法。其中,AES 目前是最常用的对称加密算法。

Java 中实现对称加密的常用类库

Java 中实现对称加密的常用类库有 JCE(Java Cryptography Extension)、Bouncy Castle 等。

JCE 是 Java SE 的一个扩展库,提供了一套 API 实现了常见的加密、数字签名、MAC、证书验证等安全功能。JCE 库中提供的对称加密算法包括DES、3DES、AES 等。

Bouncy Castle 是 Java 平台上一个广泛使用的加密相关的类库,支持多种加密算法的实现,包括 JCA(Java Cryptography Architecture)中不支持的算法,如 Blowfish、Twofish 等。

对称加密算法的实现步骤

Java 实现对称加密算法的步骤如下:

  1. 创建一个加密器对象,指定加密算法和工作模式,并初始化加密器对象。
String algorithm = "AES/CBC/PKCS5Padding"; // 指定加密算法和工作模式
Cipher cipher = Cipher.getInstance(algorithm);
  1. 创建一个密钥对象,指定密钥长度和随机数生成方式,并初始化密钥对象。
int keySize = 128; // 指定密钥长度
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom random = new SecureRandom();
kgen.init(keySize, random); // 初始化密钥生成器
SecretKey secretKey = kgen.generateKey(); // 生成密钥
  1. 初始化加密器对象,指定加密模式、密钥和随机数生成方式。
cipher.init(Cipher.ENCRYPT_MODE, secretKey, random);
  1. 对需要加密的数据进行加密,并获取加密结果。
byte[] dataToEncrypt = "Hello World".getBytes();
byte[] encryptedData = cipher.doFinal(dataToEncrypt);
  1. 创建一个解密器对象,指定加密算法和工作模式,并初始化解密器对象。
Cipher cipher2 = Cipher.getInstance(algorithm);
cipher2.init(Cipher.DECRYPT_MODE, secretKey, random);
  1. 对加密数据进行解密,获取解密结果。
byte[] decryptedData = cipher2.doFinal(encryptedData);

示例说明

下面是两条示例说明,演示如何使用 Java 实现 AES 对称加密算法。

示例一

import javax.crypto.*;
import java.security.*;
import java.util.Base64;

public class AesDemo {
    public static void main(String[] args) throws Exception {
        String message = "Hello, World!"; // 需要加密的数据

        // 生成密钥
        KeyGenerator keyGen = KeyGenerator.getInstance("AES");
        keyGen.init(128); // 指定密钥长度
        SecretKey key = keyGen.generateKey();

        // 创建加密器
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, key);

        // 加密数据
        byte[] encrypted = cipher.doFinal(message.getBytes());

        // 解密数据
        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] decrypted = cipher.doFinal(encrypted);

        // 输出加密和解密结果
        System.out.println("Message: " + message);
        System.out.println("Encrypted: " + Base64.getEncoder().encodeToString(encrypted));
        System.out.println("Decrypted: " + new String(decrypted));
    }
}

输出结果如下所示:

Message: Hello, World!
Encrypted: BRVmzFffRH/1d6o/HHpz6Q==
Decrypted: Hello, World!

示例二

import javax.crypto.*;
import java.security.*;
import java.util.Base64;

public class AesDemo {
    public static void main(String[] args) throws Exception {
        String message = "Hello, World!"; // 需要加密的数据

        // 生成密钥
        KeyGenerator keyGen = KeyGenerator.getInstance("AES");
        keyGen.init(128); // 指定密钥长度
        SecretKey key = keyGen.generateKey();

        // 创建加密器
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, key);

        // 加密数据
        byte[] encrypted = cipher.doFinal(message.getBytes());

        // 解密数据
        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] decrypted = cipher.doFinal(encrypted);

        // 输出加密和解密结果
        System.out.println("Message: " + message);
        System.out.println("Encrypted: " + Base64.getEncoder().encodeToString(encrypted));
        System.out.println("Decrypted: " + new String(decrypted));
    }
}

输出结果如下所示:

Message: Hello, World!
Encrypted: kH8pyniPgudk6APrkgvAPQ==
Decrypted: Hello, World!

以上就是 Java 实现对称加密算法的攻略。

相关文章