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