在我的Android应用程序中,我正在实现RSA加密解密。
我们有这个应用程序的ios以及android。
每当ios使用我的公钥加密消息时,在base64中发送加密文本,在android端我用我的私钥解密它。
问题是每当我解密数据时,它都会提供垃圾填充所包围的加密消息
如下图所示:
K N t X 08 I ii z < C ,r | aKj:N ^J cUX'r6Yk,OD ^)F [
tH^ f s test更新了pubkey
“测试更新的pub键”是消息。
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帮助
答案 0 :(得分:3)
尝试使用"RSA/ECB/PKCS1Padding"
代替"RSA/ECB/NoPadding"
或类似ALGO
的值。周围的随机字符实际上是随机填充字节。填充是RSA加密不可或缺的一部分,不应跳过。
请注意,KeyPairGenerator
仍应使用"RSA"
,生成器不关心加密和/或填充模式。