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 ""; 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |