在我的Android应用程序中,我正在实现RSA加密解密。
我们有适用于ios和android的此应用程序。
每当ios使用我的公钥加密消息时,都会在base64中发送加密的文本,而在android端,我会使用我的私钥对其进行解密。
问题是每当我解密数据时,它都会给加密的消息加上垃圾填充
如图所示:
K N t X 08 I ii z < C ,r | aKj:N ^J c U X 'r 6Y k,o D^ ???) F [
?tH ^ f s 测试更新的发布密钥
消息“测试更新的发布密钥”。
public static String RSADecrypt(final String result, Context context, PrivateKey key)
throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException,
BadPaddingException, InvalidKeySpecException
{
Log.d(TAG, "Decryption of " + result);
String decrypted = "";
try
{
byte[] b = Base64.decode(result, Base64.DEFAULT);
Cipher cipher1;
cipher1 = Cipher.getInstance(ALGO);
cipher1.init(Cipher.DECRYPT_MODE, key);
byte[] decryptedBytes = cipher1.doFinal(b);
decrypted = new String(decryptedBytes,"US-ASCII");
Log.d(TAG, "Decrypted text " + decrypted);
Toast.makeText(context, decrypted, Toast.LENGTH_LONG).show();;
}
catch (Exception e)
{
e.printStackTrace();
Log.d(TAG, "Exception in decryption");
}
return decrypted;
}
我无法理解问题出在哪里,在android方面的iOs方面,还是在解密后将字节转换为字符串.plz帮助
尝试使用"RSA/ECB/PKCS1Padding"
代替"RSA/ECB/NoPadding"
或类似的值ALGO
。周围的随机外观字符实际上是随机填充字节。填充是RSA加密不可或缺的一部分,不应跳过。
请注意,KeyPairGenerator
仍应使用"RSA"
,生成器与加密模式和/或填充模式无关。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句