Java字符串加密解密

在实际开发中,经常会遇到需要对字符串进行加密和解密的需求,比如存储敏感信息、传输数据等。本文将介绍如何使用Java语言对字符串进行加密和解密,并提供代码示例。

加密算法简介

在进行字符串加密和解密之前,首先需要了解一些常用的加密算法。下面是几种常见的加密算法:

  • 对称加密算法:使用相同的密钥进行加密和解密,常见的有DES、AES等。
  • 非对称加密算法:使用一对密钥,公钥用于加密,私钥用于解密,常见的有RSA、DSA等。
  • 散列算法:将任意长度的数据转换为固定长度的数据,常见的有MD5、SHA-1等。

在实际应用中,常常使用对称加密算法对数据进行加密,然后使用非对称加密算法对对称密钥进行加密,以保证数据的安全性。

字符串加密实现

在Java中,可以使用javax.crypto包提供的类来进行加密和解密操作。接下来,我们将使用AES对称加密算法对字符串进行加密和解密。

首先,我们需要生成一个密钥。可以使用KeyGenerator类来生成一个随机的AES密钥,示例代码如下:

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

public class AESKeyGenerator {
    public static SecretKey generateKey() throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(128); // 设置密钥长度为128位
        return keyGenerator.generateKey();
    }

    public static void main(String[] args) throws Exception {
        SecretKey secretKey = generateKey();
        System.out.println("生成的密钥:" + secretKey);
    }
}

以上代码生成了一个128位的AES密钥。

接下来,我们可以使用Cipher类进行加密和解密操作。示例代码如下:

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class AESEncryptDecrypt {
    public static String encrypt(String plainText, SecretKey secretKey) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    public static String decrypt(String encryptedText, SecretKey secretKey) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] encryptedBytes = Base64.getDecoder().decode(encryptedText);
        byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
        return new String(decryptedBytes);
    }

    public static void main(String[] args) throws Exception {
        String plainText = "Hello, World!";
        SecretKey secretKey = AESKeyGenerator.generateKey();

        String encryptedText = encrypt(plainText, secretKey);
        System.out.println("加密后的字符串:" + encryptedText);

        String decryptedText = decrypt(encryptedText, secretKey);
        System.out.println("解密后的字符串:" + decryptedText);
    }
}

以上代码使用AES密钥对字符串进行加密和解密操作,并输出结果。

类图

classDiagram
    class AESKeyGenerator{
        <<final>>
        -generateKey(): SecretKey
        +main(String[]): void
    }
    class AESEncryptDecrypt{
        <<final>>
        -encrypt(String, SecretKey): String
        -decrypt(String, SecretKey): String
        +main(String[]): void
    }
    class SecretKey{
        <<final>>
    }
    AESKeyGenerator --> SecretKey
    AESEncryptDecrypt --> SecretKey

上述类图展示了AESKeyGenerator和AESEncryptDecrypt两个类之间的关系,其中AESKeyGenerator生成并返回SecretKey,AESEncryptDecrypt使用SecretKey进行加密和解密操作。

总结

本文介绍了Java中如何对字符串进行加密和解密操作。首先,我们了解了一些常用的加密算法,然后使用AES对称加密算法对字符串进行加密和解密。最后,给出了代码示例,并通过类图展示了相关类的关系。在实际应用中,可以根据需求选择合适的加密算法,并结合Java提供的加密API进行实现。