gpt4 book ai didi

java - RSA加密Android和Java解密 : javax. crypto.BadPaddingException: Decryption error

转载 作者:搜寻专家 更新时间:2023-11-01 07:49:55 24 4
gpt4 key购买 nike

我有一个使用 RSA 2048 位 key 加密文本的 Android 应用。

加密和解密在应用程序上运行良好。

我的问题是我试图在应用程序上加密,然后将密码发送到外部 Java 程序进行解密。

具体做法如下:

public static PrivateKey getPrivateKey(String key) {
try {
/* Add PKCS#8 formatting */
byte[] byteKey = Base64.getDecoder().decode(key.getBytes());
ASN1EncodableVector v = new ASN1EncodableVector();
v.add(new ASN1Integer(0));
ASN1EncodableVector v2 = new ASN1EncodableVector();
v2.add(new ASN1ObjectIdentifier(PKCSObjectIdentifiers.rsaEncryption.getId()));
v2.add(DERNull.INSTANCE);
v.add(new DERSequence(v2));
v.add(new DEROctetString(byteKey));
ASN1Sequence seq = new DERSequence(v);
byte[] privKey = seq.getEncoded("DER");

PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privKey);
KeyFactory kf = KeyFactory.getInstance("RSA");
return kf.generatePrivate(keySpec);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

public static String decrypt(String cipherString,PrivateKey privateKey){
try{
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] plainByte = cipher.doFinal(Base64.getDecoder().decode(cipherString));
return Base64.getEncoder().encodeToString(plainByte);
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}

但是当我尝试解密密码时出现错误:

javax.crypto.BadPaddingException: Decryption error
at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:380)
at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:291)
at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:363)
at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:389)
at javax.crypto.Cipher.doFinal(Cipher.java:2165)
at RSA.decrypt(RSA.java:94)
at RSA.main(RSA.java:116)

我错过了什么?

更新我在 Java 本身中重新生成了一对新的 key 并删除了部分:

/* Add PKCS#8 formatting */
byte[] byteKey = Base64.getDecoder().decode(key.getBytes());
ASN1EncodableVector v = new ASN1EncodableVector();
v.add(new ASN1Integer(0));
ASN1EncodableVector v2 = new ASN1EncodableVector();
v2.add(new ASN1ObjectIdentifier(PKCSObjectIdentifiers.rsaEncryption.getId()));
v2.add(DERNull.INSTANCE);
v.add(new DERSequence(v2));
v.add(new DEROctetString(byteKey));
ASN1Sequence seq = new DERSequence(v);
byte[] privKey = seq.getEncoded("DER");

但我遇到了同样的错误!

最佳答案

您的填充未设置或设置错误。

尝试将 Cipher cipher = Cipher.getInstance("RSA"); 更改为 Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

如果这不起作用,您可以查看 here对于其他填充模式。

关于java - RSA加密Android和Java解密 : javax. crypto.BadPaddingException: Decryption error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36293503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com