java rsa x509_【提问】求助JAVA的RSA算法X509编码密钥的详解

[Java] 纯文本查看 复制代码public class Encrypt_RAS {

private static final int MAX_DECRYPT_BLOCK = 128;

private static final int MAX_ENCRYPT_BLOCK = 117;

private static Encrypt_RAS instance;

private String privateKey;

private String publicKey;

private Encrypt_RAS() {

super();

this.init();

}

public String decryptByPrivateKeyNew(String data) throws Exception {

byte[] v4 = Base64.decode(URLDecoder.decode(data, "UTF-8").getBytes("utf-8"), 0);

PrivateKey v12 = KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(Base64

.decode(this.privateKey, 0)));

Cipher v2 = Cipher.getInstance("RSA/ECB/PKCS1Padding");

v2.init(2, ((Key)v12));

int v6 = v4.length;

ByteArrayOutputStream v10 = new ByteArrayOutputStream();

int v9 = 0;

int v5 = 0;

while(v6 - v9 > 0) {

byte[] v1 = v6 - v9 > 128 ? v2.doFinal(v4, v9, 128) : v2.doFinal(v4, v9, v6 - v9);

v10.write(v1, 0, v1.length);

++v5;

v9 = v5 * 128;

}

byte[] v3 = v10.toByteArray();

v10.close();

return URLDecoder.decode(new String(v3), "UTF-8");

}

public String encryptByPublicKeyNew(String encryptData) throws Exception {

byte[] v4 = encryptData.getBytes("utf-8");

PublicKey v12 = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(Base64.decode(

this.publicKey, 0)));

Cipher v3 = Cipher.getInstance("RSA/ECB/PKCS1Padding");

v3.init(1, ((Key)v12));

int v7 = v4.length;

ByteArrayOutputStream v11 = new ByteArrayOutputStream();

int v10 = 0;

int v6 = 0;

while(v7 - v10 > 0) {

byte[] v2 = v7 - v10 > 117 ? v3.doFinal(v4, v10, 117) : v3.doFinal(v4, v10, v7 - v10);

v11.write(v2, 0, v2.length);

++v6;

v10 = v6 * 117;

}

byte[] v5 = v11.toByteArray();

v11.close();

return URLEncoder.encode(Base64.encodeToString(v5, 0), "UTF-8");

}

public static Encrypt_RAS getInstance() {

if(Encrypt_RAS.instance == null) {

Encrypt_RAS.instance = new Encrypt_RAS();

}

return Encrypt_RAS.instance;

}

private void init() {

if(TextUtils.isEmpty(this.publicKey)) {

this.publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4Z2JiaDphN8Tc+veAEEjSsoT7QAxo/2PENyIrKIpFCQ+/RLULzlJ4U+AK3KzEgDVdQgWvJMq6mhKNRvzkDH4fBEwiGzaiKGc8rg7sI5nEhectPixeL4C198p5d+DlnKzs77XNTHEmGQMco+9vHpnQAwvNTygkEjrW9N/UNWyA1wIDAQAB";

}

if(TextUtils.isEmpty(this.privateKey)) {

this.privateKey = "MIICeQIBADANBgkqhkiG9w0BAQEFAASCAmMwggJfAgEAAoGBAMbuFbfe3lgZy+Npz3TNKuzX0M9XubHaRDEqiUaX/jy2TEgI/BVo1ka7R/53EDwE1Hqa9Zn8ocQOtNjnQn8rVjTU2eLlmXah5ezZ0h6OFKr06HhO4/Qp+5EKuMpdvwNNm5qR1i3HbyAiP2EqBAIzlUgXrKH9xW/SbUNc+tfgGWT1AgMBAAECgYEAhV2e39uh0wzQXVFVzSezjH+PtUJJ80uyhgfPaq2Bu/A3qd+kKTJU3ay3MoleL+7JCL2UxLzTMt7tLbG1Kg7Cxo/yWUC7+51wvRY7KTxKp8DbEpPAcl9gZfR0lsghbHZqDr2EpgsbDbXlVKIgnhG1xs1oq2o8LC+OljUvZd729QECQQDnYAtHWTQ0m8GGjK0Nx39YzCkODDhjSaVmpmQX2rKr47TFOgd5JCCLFkYDkRsRQQ9zm86DyBX8WufiOI79oU21AkEA3BoNk76SFyvwKzNoVVrSVrHDY3szpXHBwT943HumT8tc+LzfuwbpJCOP289CCaGZr7dNdJLJg8j3wohIBSxCQQJBAJTYBGlxyVPOn0CfXvRuUk4diIuw8NVumyjeAaYW2roZUkFOg2A7DXRsb737qx3+bKJCqSe9n+cn0+SD3fjru8ECQQCcnuFob+RvHrIBW8xzaHRigo5B/QpsQT2ZsPvlEQvwngqjaWtfH/TI5ZFZ3erlBZxiIHK6cDV7VIeRYv60x6DBAkEAk5KwZCSgVcL5evw5QhzbVRwwqGtXDHTpcTkz1M77QImDFYSJ6TMZOlO4EA3j8wIJCDW7kh+3c2J/HlG6C6MJTA==";

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值