Java自带加密

引言

在现代信息时代,数据的安全性和保密性越来越受到重视。很多应用程序需要对敏感数据进行加密,以确保数据在传输和存储过程中的安全。Java作为一种广泛使用的编程语言,提供了许多自带的加密算法和工具类,为开发人员提供了便利。

本文将介绍Java自带的加密算法和相关的工具类,并通过示例代码演示如何使用这些算法进行加密操作。同时,我们还将通过类图和旅行图的方式,更加直观地展示相关类和方法之间的关系。

加密算法

Java自带的加密算法包含对称加密和非对称加密两种方式。

对称加密

对称加密算法使用相同的密钥进行加密和解密操作。常见的对称加密算法有DES、AES等。Java提供了javax.crypto包来支持对称加密算法的使用。

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

public class SymmetricEncryptionExample {
    public static void main(String[] args) throws Exception {
        // 生成密钥
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        SecretKey secretKey = keyGenerator.generateKey();

        // 加密
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encryptedData = cipher.doFinal("Hello World".getBytes());

        // 解密
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decryptedData = cipher.doFinal(encryptedData);

        System.out.println(new String(decryptedData));
    }
}

通过上述代码,我们可以实现对字符串"Hello World"的加密和解密操作。先通过KeyGenerator生成AES算法对应的密钥,然后使用Cipher类进行加密和解密。

非对称加密

非对称加密算法使用一对密钥,包括公钥和私钥。公钥用于加密,私钥用于解密。常见的非对称加密算法有RSA、DSA等。Java提供了java.security包来支持非对称加密算法的使用。

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

public class AsymmetricEncryptionExample {
    public static void main(String[] args) throws Exception {
        // 生成密钥对
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        PublicKey publicKey = keyPair.getPublic();
        PrivateKey privateKey = keyPair.getPrivate();

        // 加密
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encryptedData = cipher.doFinal("Hello World".getBytes());

        // 解密
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] decryptedData = cipher.doFinal(encryptedData);

        System.out.println(new String(decryptedData));
    }
}

通过以上代码,我们可以实现对字符串"Hello World"的加密和解密操作。先通过KeyPairGenerator生成RSA算法对应的密钥对,然后使用Cipher类进行加密和解密。

工具类

除了提供加密算法的支持,Java还提供了一些工具类来简化加密操作。

MessageDigest

java.security.MessageDigest类提供了信息摘要算法的支持,可以实现数据的哈希运算。

import java.security.MessageDigest;
import java.util.Arrays;

public class MessageDigestExample {
    public static void main(String[] args) throws Exception {
        // 计算SHA-256摘要
        MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
        byte[] digest = messageDigest.digest("Hello World".getBytes());

        System.out.println(Arrays.toString(digest));
    }
}

通过上述代码,我们可以计算字符串"Hello World"的SHA-256摘要。

SecureRandom

java.security.SecureRandom类提供了安全的随机数生成器,可以生成高质量的随机数。

import java.security.SecureRandom;
import java.util.Arrays;

public class SecureRandomExample {
    public static void main(String[] args) throws Exception {
        // 生成随机数
        SecureRandom secureRandom