可逆加密算法 Java

1. 引言

在信息安全领域中,加密算法起着至关重要的作用。它们可以保护敏感信息的安全性,防止被未授权的人访问、修改或泄露。可逆加密算法在加密和解密过程中使用相同的密钥,可以将明文转换为密文,并且还可以将密文恢复为原始的明文。本文将介绍可逆加密算法的原理,并使用 Java 编程语言提供一些代码示例。

2. 可逆加密算法原理

可逆加密算法的原理是使用一个密钥对明文进行加密转换,然后使用同一个密钥对密文进行解密转换,以恢复原始的明文。常见的可逆加密算法有对称加密算法和非对称加密算法。

2.1 对称加密算法

对称加密算法使用相同的密钥对明文和密文进行加密和解密。示例代码如下:

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

public class SymmetricEncryption {
    public static void main(String[] args) throws Exception {
        String key = "ThisIsASecretKey";
        String plaintext = "Hello World!";
        
        // 创建加密器
        Cipher cipher = Cipher.getInstance("AES");
        
        // 创建密钥
        SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES");
        
        // 加密
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes());
        
        // 解密
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
        
        String decryptedText = new String(decryptedBytes);
        
        System.out.println("Original Text: " + plaintext);
        System.out.println("Encrypted Text: " + new String(encryptedBytes));
        System.out.println("Decrypted Text: " + decryptedText);
    }
}

在上面的代码中,我们使用了对称加密算法 AES。首先,我们创建了一个加密器 Cipher 对象,并指定使用 AES 算法。然后,我们创建了一个密钥 SecretKeySpec 对象,并使用密钥字节数组和 AES 算法来初始化它。接下来,我们使用 cipher.init() 方法将加密器初始化为加密模式或解密模式,并传入密钥。然后,我们使用 cipher.doFinal() 方法对明文进行加密或解密操作。最后,我们将得到的密文进行输出,然后再将密文进行解密操作,得到原始的明文。

2.2 非对称加密算法

非对称加密算法使用一对密钥,即公钥和私钥。公钥用于加密,私钥用于解密。示例代码如下:

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import javax.crypto.Cipher;

public class AsymmetricEncryption {
    public static void main(String[] args) throws Exception {
        String plaintext = "Hello World!";
        
        // 生成密钥对
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(2048);
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        
        // 获取公钥和私钥
        PublicKey publicKey = keyPair.getPublic();
        PrivateKey privateKey = keyPair.getPrivate();
        
        // 创建加密器
        Cipher cipher = Cipher.getInstance("RSA");
        
        // 加密
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes());
        
        // 解密
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
        
        String decryptedText = new String(decryptedBytes);
        
        System.out.println("Original Text: " + plaintext);
        System.out.println("Encrypted Text: " + new String(encryptedBytes));
        System.out.println("Decrypted Text: " + decryptedText);
    }
}

在上面的代码中,我们使用了非对称加密算法 RSA。首先,我们使用 KeyPairGenerator 生成了一个密钥对,并指定使用 RSA 算法和密钥长度为 2048。然后,我们使用 keyPair.getPublic()keyPair.getPrivate() 方法获取公钥