使用RSA java解密Base64加密字符串后的垃圾值

时间:2014-01-14 12:38:08

标签: java ios encryption cryptography rsa

在我的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帮助

1 个答案:

答案 0 :(得分:3)

尝试使用"RSA/ECB/PKCS1Padding"代替"RSA/ECB/NoPadding"或类似ALGO的值。周围的随机字符实际上是随机填充字节。填充是RSA加密不可或缺的一部分,不应跳过。

请注意,KeyPairGenerator仍应使用"RSA",生成器不关心加密和/或填充模式。