Java加密与解密算法

1. 简介

Java提供了丰富的加密与解密算法,可以用于保护敏感数据的安全性。本文将介绍Java中常用的加密与解密算法以及如何实现它们。

2. 加密与解密流程

下面是加密与解密算法的一般流程:

st=>start: 开始
e=>end: 结束
op1=>operation: 选择算法
op2=>operation: 生成密钥
op3=>operation: 加密/解密数据
cond1=>condition: 是否需要加密
cond2=>condition: 是否需要解密

st->op1->op2->cond1
cond1(yes)->op3->e
cond1(no)->cond2
cond2(yes)->op3->e
cond2(no)->e

3. 加密与解密算法选择

在开始使用加密与解密算法之前,我们需要选择合适的算法。常见的加密算法有对称加密算法和非对称加密算法。

对称加密算法使用相同的密钥进行加密和解密,速度较快,适合对大量数据进行加密和解密。常见的对称加密算法有DES、AES等。

非对称加密算法使用公钥进行加密,私钥进行解密,安全性较高,适合对少量数据进行加密和解密。常见的非对称加密算法有RSA、DSA等。

在本文中,我们选择AES对称加密算法来进行示例。

4. 生成密钥

使用AES算法进行加密和解密,需要生成一个密钥。下面是生成密钥的代码:

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

KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128); // 设置密钥长度为128位
SecretKey secretKey = keyGenerator.generateKey();

代码解释:

  • KeyGenerator类用于生成密钥。
  • getInstance("AES")指定使用AES算法。
  • init(128)设置密钥长度为128位。
  • generateKey()生成密钥。

5. 加密数据

加密数据的步骤如下:

  1. 创建Cipher对象并初始化为加密模式。
  2. 使用生成的密钥进行加密。
  3. 将加密后的数据转换为Base64编码。

下面是加密数据的代码:

import javax.crypto.Cipher;
import java.util.Base64;

Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey); // 加密模式,使用生成的密钥
byte[] encryptedData = cipher.doFinal(plainText.getBytes());
String encryptedText = Base64.getEncoder().encodeToString(encryptedData);

代码解释:

  • Cipher类用于加密和解密。
  • getInstance("AES")指定使用AES算法。
  • init(Cipher.ENCRYPT_MODE, secretKey)初始化为加密模式。
  • doFinal(plainText.getBytes())进行加密。
  • Base64.getEncoder().encodeToString(encryptedData)将加密后的数据转换为Base64编码。

6. 解密数据

解密数据的步骤如下:

  1. 创建Cipher对象并初始化为解密模式。
  2. 使用生成的密钥进行解密。
  3. 将解密后的数据转换为字符串。

下面是解密数据的代码:

import javax.crypto.Cipher;
import java.util.Base64;

Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey); // 解密模式,使用生成的密钥
byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
String decryptedText = new String(decryptedData);

代码解释:

  • Cipher类用于加密和解密。
  • getInstance("AES")指定使用AES算法。
  • init(Cipher.DECRYPT_MODE, secretKey)初始化为解密模式。
  • doFinal(Base64.getDecoder().decode(encryptedText))进行解密。
  • new String(decryptedData)将解密后的数据转换为字符串。

7. 示例代码

下面是完整的示例代码:

import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.Cipher;
import java.util.Base64;

public class EncryptionExample {
    public static void main(String[] args) throws