package com.dayu.qiheonlinelibrary.net; import java.io.ByteArrayInputStream; import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; import java.security.InvalidKeyException; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; import java.security.PublicKey; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.security.spec.InvalidKeySpecException; import java.security.spec.X509EncodedKeySpec; import java.util.Base64; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; /** * author: zuo * Date: 2024-07-29 * Time: 14:38 * 备注:RSA加密工具类 */ public class RSAUtile { public static String encryptByPublicKey(String data, String publicKeyPEM) { try { // 得到公钥 publicKeyPEM = publicKeyPEM.replace("-----BEGIN PUBLIC KEY-----", "") .replace("-----END PUBLIC KEY-----", "") .replaceAll("\\s+", ""); // 解码Base64编码的公钥 byte[] decoded = new byte[0]; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { decoded = Base64.getDecoder().decode(publicKeyPEM); } else { decoded = android.util.Base64.decode(publicKeyPEM, android.util.Base64.DEFAULT); } // 生成公钥 X509EncodedKeySpec spec = new X509EncodedKeySpec(decoded); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PublicKey publicKey = keyFactory.generatePublic(spec); // 加密数据 Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); cipher.init(Cipher.ENCRYPT_MODE, publicKey); byte[] encryptedBytes = cipher.doFinal(data.getBytes("UTF-8")); String encryptedData = null; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { encryptedData = Base64.getEncoder().encodeToString(encryptedBytes); } else { encryptedData = android.util.Base64.encodeToString(encryptedBytes, android.util.Base64.DEFAULT); } return encryptedData; } catch (Exception e) { e.printStackTrace(); } return ""; } }