From 7f55711fd88ff5dc67bbd386fbecc7bd50bd98c2 Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期四, 06 三月 2025 14:44:04 +0800 Subject: [PATCH] feat(generallibrary): 新增制卡管理功能 --- qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/RSAUtile.java | 55 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 45 insertions(+), 10 deletions(-) diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/RSAUtile.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/RSAUtile.java index c2f1654..4d98b06 100644 --- a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/RSAUtile.java +++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/RSAUtile.java @@ -1,11 +1,22 @@ 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 @@ -15,18 +26,42 @@ */ public class RSAUtile { - public static byte[] encryptByPublicKey(String data, String publicKey) throws Exception { - // 寰楀埌鍏挜 - X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKey.getBytes(StandardCharsets.UTF_8)); - KeyFactory kf = KeyFactory.getInstance("RSA"); - PublicKey keyPublic = kf.generatePublic(keySpec); - // 鍔犲瘑鏁版嵁 - Cipher cp = Cipher.getInstance("RSA/ECB/PKCS1Padding"); - cp.init(Cipher.ENCRYPT_MODE, keyPublic); - return cp.doFinal(data.getBytes(StandardCharsets.UTF_8)); - } + public static String encryptByPublicKey(String data, String publicKeyPEM) { + try { + // 寰楀埌鍏挜 + publicKeyPEM = publicKeyPEM.replace("-----BEGIN PUBLIC KEY-----", "") + .replace("-----END PUBLIC KEY-----", "") + .replaceAll("\\s+", ""); + // 瑙g爜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 ""; + } + } -- Gitblit v1.8.0