完整的加密解密aes
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.Base64;
import javax.crypto.Cipher;
public class RSAUtil {
// 生成 RSA 密钥对(2048位)
public static void generateKeyPair() throws Exception {KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");kpg.initialize(2048); // 使用2048位长度KeyPair kp = kpg.generateKeyPair();String publicKey = Base64.getEncoder().encodeToString(kp.getPublic().getEncoded());String privateKey = Base64.getEncoder().encodeToString(kp.getPrivate().getEncoded());System.out.println("公钥(Base64编码):\n" + publicKey);System.out.println("\n私钥(Base64编码):\n" + privateKey);
}/*** 使用 Base64 编码的公钥加密数据** @param data 待加密的数据* @param base64PublicKey 公钥(Base64编码)* @return 加密后的 Base64 字符串*/
public static String encrypt(String data, String base64PublicKey) throws Exception {byte[] decodedKey = Base64.getDecoder().decode(base64PublicKey);PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new java.security.spec.X509EncodedKeySpec(decodedKey));Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");cipher.init(Cipher.ENCRYPT_MODE, publicKey);byte[] encryptedBytes = cipher.doFinal(data.getBytes("UTF-8"));return Base64.getEncoder().encodeToString(encryptedBytes);
}/*** 使用 Base64 编码的私钥解密数据** @param encryptedData 加密后的 Base64 字符串* @param base64PrivateKey 私钥(Base64编码)* @return 解密后的原始字符串*/
public static String decrypt(String encryptedData, String base64PrivateKey) throws Exception {byte[] pkcs8Bytes = Base64.getDecoder().decode(base64PrivateKey);PrivateKey privateKey = KeyFactory.getInstance("RSA").generatePrivate(new java.security.spec.PKCS8EncodedKeySpec(pkcs8Bytes));Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");cipher.init(Cipher.DECRYPT_MODE, privateKey);byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedData));return new String(decryptedBytes, "UTF-8");
}// ✅ 示例主函数:演示加密和解密流程
public static void main(String[] args) throws Exception {// Step 1: 生成密钥对(可注释掉,只运行一次即可)generateKeyPair();// Step 2: 模拟前端传来的公钥(从上面复制过来)String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."; // 替换为实际公钥String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASC..."; // 替换为实际私钥String original = "这是需要加密的内容";// Step 3: 加密String encrypted = encrypt(original, publicKey);System.out.println("加密结果:" + encrypted);// Step 4: 解密String decrypted = decrypt(encrypted, privateKey);System.out.println("解密结果:" + decrypted);
}
}