Java使用RSA和AES实现加密解密的详细实例代码

6 下载量 157 浏览量 更新于2024-09-01 收藏 72KB PDF 举报
Java 使用 RSA 与 AES 加密解密的实例代码详解 加密解密基础知识 在了解 Java 使用 RSA 与 AES 加密解密的实例代码之前,需要先了解加密解密的基础知识。加密解密可以分为对称加密和非对称加密两种。 对称加密 对称加密是指加密和解密使用相同的密钥。对称加密的优点是速度快,常用的对称加密算法有 AES、DES 等。对称加密的缺点是密钥的管理和分发不方便。 非对称加密 非对称加密是指加密和解密使用不同的密钥。非对称加密的优点是可以实现身份验证和加密,常用的非对称加密算法有 RSA、DSA 等。非对称加密的缺点是速度慢。 Java 中的加密解密 Java 中提供了多种加密解密算法,包括对称加密和非对称加密。Java 的加密解密API 由 Java Cryptography Architecture (JCA) 提供。 RSA 加密解密 RSA 是一种非对称加密算法,常用于身份验证和加密。RSA 的加密解密过程可以分为以下步骤: 1. 生成密钥对:生成一对公钥和私钥。 2. 加密:使用公钥加密数据。 3. 解密:使用私钥解密数据。 AES 加密解密 AES 是一种对称加密算法,常用于加密数据。AES 的加密解密过程可以分为以下步骤: 1. 生成密钥:生成一个密钥。 2. 加密:使用密钥加密数据。 3. 解密:使用密钥解密数据。 Java 中使用 RSA 和 AES 加密解密 Java 中可以使用 Bouncy Castle library 实现 RSA 和 AES 加密解密。Bouncy Castle 是一个开源的加密库,提供了多种加密算法的实现。 RSAUtils 工具类 下面是一个使用 Bouncy Castle library 实现的 RSAUtils 工具类: ```java package cn.wangtao.utils; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.crypto.Cipher; import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.security.*; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; public class RSAUtils { private static final String RSA = "RSA"; // 加密方式 private static final Logger logger = LoggerFactory.getLogger(RSAUtils.class); // 获取密钥 public static KeyPair getKey() throws Exception { // 生成密钥对 KeyPairGenerator kpg = KeyPairGenerator.getInstance(RSA); kpg.initialize(1024); KeyPair kp = kpg.generateKeyPair(); return kp; } // 加密 public static byte[] encrypt(byte[] data, PublicKey publicKey) throws Exception { Cipher cipher = Cipher.getInstance(RSA); cipher.init(Cipher.ENCRYPT_MODE, publicKey); return cipher.doFinal(data); } // 解密 public static byte[] decrypt(byte[] data, PrivateKey privateKey) throws Exception { Cipher cipher = Cipher.getInstance(RSA); cipher.init(Cipher.DECRYPT_MODE, privateKey); return cipher.doFinal(data); } } ``` 使用 RSAUtils 工具类 使用 RSAUtils 工具类可以实现 RSA 加密解密。下面是一个示例代码: ```java public class Main { public static void main(String[] args) throws Exception { // 生成密钥对 KeyPair kp = RSAUtils.getKey(); // 加密 byte[] data = "Hello, World!".getBytes(); byte[] encryptedData = RSAUtils.encrypt(data, kp.getPublic()); // 解密 byte[] decryptedData = RSAUtils.decrypt(encryptedData, kp.getPrivate()); System.out.println(new String(decryptedData)); } } ``` AES 加密解密 下面是一个使用 AES 加密解密的示例代码: ```java public class AESUtils { private static final String AES = "AES"; // 加密方式 // 加密 public static byte[] encrypt(byte[] data, byte[] key) throws Exception { Cipher cipher = Cipher.getInstance(AES); cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key, AES)); return cipher.doFinal(data); } // 解密 public static byte[] decrypt(byte[] data, byte[] key) throws Exception { Cipher cipher = Cipher.getInstance(AES); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key, AES)); return cipher.doFinal(data); } } ``` 使用 AESUtils 工具类 使用 AESUtils 工具类可以实现 AES 加密解密。下面是一个示例代码: ```java public class Main { public static void main(String[] args) throws Exception { // 生成密钥 byte[] key = new byte[16]; // 16 字节的密钥 SecureRandom random = new SecureRandom(); random.nextBytes(key); // 加密 byte[] data = "Hello, World!".getBytes(); byte[] encryptedData = AESUtils.encrypt(data, key); // 解密 byte[] decryptedData = AESUtils.decrypt(encryptedData, key); System.out.println(new String(decryptedData)); } } ``` Java 中使用 RSA 与 AES 加密解密可以实现身份验证和加密,保护数据的安全。