RSA解密,同样的代码在java中结果正常,Android中会在正确结果前面多出很多东西怎么回事?

qq_24683975 2020-10-06 10:14:27
jdk版本都是1.8(都是用的安装Android Studio时安装的jdk)
公钥:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdHc7rWSuL8JCVRY0PwaeIsHX/gel/hvKA3zi5eH2C2bk9HFGbsNKX2Wg+rbXse0SfLLkF42gzD0ghlc7JeVC8DIJI4ef33UUjfcDyQ1xtsuFZDsIg4hFJPAeuaW0CNM1ydl2c2IzIiNL6AL0q736vkl0rqOS5IKw74/K2uQFcgQIDAQAB

私钥:
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJ0dzutZK4vwkJVFjQ/Bp4iwdf+B6X+G8oDfOLl4fYLZuT0cUZuw0pfZaD6ttex7RJ8suQXjaDMPSCGVzsl5ULwMgkjh5/fdRSN9wPJDXG2y4VkOwiDiEUk8B65pbQI0zXJ2XZzYjMiI0voAvSrvfq+SXSuo5LkgrDvj8ra5AVyBAgMBAAECgYA1OfXxcQH5pIO2rhs9rUNOYUl4R9CMrXDWC8kxvAn5HD1O4Jsc/Wg6nSJdqYeqF5CFxCbiQcn5EkJDbnbhdkHNCRgbfz/TubcX3KQtax0CRsGwRVj98uQNmoNucVk+J5UPX9LyXXWr+d6WxG2hIFVMg9oo/A/kZe/5v+n6X72tgQJBAO6OdcG5bEpDesUM7Oq+2NzRzkA8dbdkOXbV+811ylFy2IARLdNnaAw3VgjjDQ2DnLAYr/Ows+Y37cKmuuN4R7kCQQComt8l3NQy1S3m2Qh3smOyJ7ipv5U2yHPNZFQekE2IaRKbY3JEWxHDB5rNHY1cJygWMWzanv66I4DL2+dtqw8JAkBoxzefhAK1R5g3zmqM3JBBxQETI7sMdr/qmygC4TaguZGwBlubW/LOUsu+EYPdKK58hgtaPIV3m58ZfMPfPyg5AkBwHUPDTpuADcePGMSLq4Clx8oAfle/bP2sF0nkZPpZed0YnMEv+QrPkC/8suj73UHHuCf1HAKwTcloRZsXjsbZAkEAqPM4NgdRZhUAwRiI1ZBeED4/pIKRQyb3QHPLvuBuvLpxALGVDfxKHHqPz28AAm3+Ska4EERrtIveAq826IdqKA==

加密内容:
MGXvX+LVhDJPhrJXnZai6CDvg8Tgs8eIzFe0i5XKhmu5wcavibVjsYm1+3oMoXl3RfS07Vq1gM1hqWhTSb9EDP4wfFRVHDxhCQ3TDNOcJwf2bycoUBIQLjX0NySvocPRWGSNsVJYKNxyHOovrV1WEr1V9fMiO7u3jU6qO2XV1Us=

正确的解密结果:丬__
java代码:(网上复制的,然后自己加了个构造器)
因为Android中用java.util.Base64需要sdk26,但是我要兼容到sdk21,所以在java里面把下面这段代码打包成了jar然后直接调用的...
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package MyBase64;

import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import javax.crypto.Cipher;

public class MyBase64 {
public static final String KEY_ALGORITHM = "RSA";
public static final String SIGNATURE_ALGORITHM = "MD5withRSA";
private static final int KEY_SIZE = 1024;
private static final String PUBLIC_KEY = "RSAPublicKey";
private static final String PRIVATE_KEY = "RSAPrivateKey";
private static String str_pubK = "";
private static String str_priK = "";

public MyBase64(String pubK, String priK) {
str_priK = priK;
str_pubK = pubK;
}

public static PublicKey getPublicKey(String key) throws Exception {
byte[] keyBytes = Base64.getDecoder().decode(key);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(keySpec);
return publicKey;
}

public PrivateKey getPrivateKey(String key) throws Exception {
byte[] keyBytes = Base64.getDecoder().decode(key);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
return privateKey;
}

public byte[] sign(byte[] data) throws Exception {
PrivateKey priK = this.getPrivateKey(str_priK);
Signature sig = Signature.getInstance("MD5withRSA");
sig.initSign(priK);
sig.update(data);
return sig.sign();
}

public boolean verify(byte[] data, byte[] sign) throws Exception {
PublicKey pubK = getPublicKey(str_pubK);
Signature sig = Signature.getInstance("MD5withRSA");
sig.initVerify(pubK);
sig.update(data);
return sig.verify(sign);
}

public byte[] encrypt(byte[] bt_plaintext) throws Exception {
PublicKey publicKey = getPublicKey(str_pubK);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(1, publicKey);
byte[] bt_encrypted = cipher.doFinal(bt_plaintext);
return bt_encrypted;
}

public byte[] decrypt(String bt_encrypted) throws Exception {
PrivateKey privateKey = this.getPrivateKey(str_priK);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(2, privateKey);
return cipher.doFinal(Base64.getDecoder().decode(bt_encrypted));
}

public static void main(String[] args) throws Exception {
String pub = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdHc7rWSuL8JCVRY0PwaeIsHX/gel/hvKA3zi5eH2C2bk9HFGbsNKX2Wg+rbXse0SfLLkF42gzD0ghlc7JeVC8DIJI4ef33UUjfcDyQ1xtsuFZDsIg4hFJPAeuaW0CNM1ydl2c2IzIiNL6AL0q736vkl0rqOS5IKw74/K2uQFcgQIDAQAB";
String pri = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJ0dzutZK4vwkJVFjQ/Bp4iwdf+B6X+G8oDfOLl4fYLZuT0cUZuw0pfZaD6ttex7RJ8suQXjaDMPSCGVzsl5ULwMgkjh5/fdRSN9wPJDXG2y4VkOwiDiEUk8B65pbQI0zXJ2XZzYjMiI0voAvSrvfq+SXSuo5LkgrDvj8ra5AVyBAgMBAAECgYA1OfXxcQH5pIO2rhs9rUNOYUl4R9CMrXDWC8kxvAn5HD1O4Jsc/Wg6nSJdqYeqF5CFxCbiQcn5EkJDbnbhdkHNCRgbfz/TubcX3KQtax0CRsGwRVj98uQNmoNucVk+J5UPX9LyXXWr+d6WxG2hIFVMg9oo/A/kZe/5v+n6X72tgQJBAO6OdcG5bEpDesUM7Oq+2NzRzkA8dbdkOXbV+811ylFy2IARLdNnaAw3VgjjDQ2DnLAYr/Ows+Y37cKmuuN4R7kCQQComt8l3NQy1S3m2Qh3smOyJ7ipv5U2yHPNZFQekE2IaRKbY3JEWxHDB5rNHY1cJygWMWzanv66I4DL2+dtqw8JAkBoxzefhAK1R5g3zmqM3JBBxQETI7sMdr/qmygC4TaguZGwBlubW/LOUsu+EYPdKK58hgtaPIV3m58ZfMPfPyg5AkBwHUPDTpuADcePGMSLq4Clx8oAfle/bP2sF0nkZPpZed0YnMEv+QrPkC/8suj73UHHuCf1HAKwTcloRZsXjsbZAkEAqPM4NgdRZhUAwRiI1ZBeED4/pIKRQyb3QHPLvuBuvLpxALGVDfxKHHqPz28AAm3+Ska4EERrtIveAq826IdqKA==";
String string = "MGXvX+LVhDJPhrJXnZai6CDvg8Tgs8eIzFe0i5XKhmu5wcavibVjsYm1+3oMoXl3RfS07Vq1gM1hqWhTSb9EDP4wfFRVHDxhCQ3TDNOcJwf2bycoUBIQLjX0NySvocPRWGSNsVJYKNxyHOovrV1WEr1V9fMiO7u3jU6qO2XV1Us=";
System.out.println(new String((new MyBase64(pub, pri)).decrypt(string)));
}
}

...全文
13865 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianfang 2020-10-07
  • 打赏
  • 举报
回复
CSDN推荐挺不错的
霖霖怪 2020-10-07
  • 打赏
  • 举报
回复
还有这好事
qq_24683975 2020-10-06
  • 打赏
  • 举报
回复
来个人回复下我结贴送分吧......
qq_24683975 2020-10-06
  • 打赏
  • 举报
回复

80,371

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧