1

A 在我的 Android 项目中出现错误(RSA 加密/解密)。加密通过 OK,但是当我尝试解密加密文本时,出现错误:"too much data for RSA block"

如何解决这个问题呢?

代码:

public String Decrypt(String text) throws Exception
{
    try{
        Log.i("Crypto.java:Decrypt", text);
        RSAPrivateKey privateKey = (RSAPrivateKey)kp.getPrivate();
        Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding");
            cipher.init(Cipher.DECRYPT_MODE, privateKey);
            byte[] cipherData = cipher.doFinal(text.getBytes());// <----ERROR: too much data for RSA block
            byte[] decryptedBytes = cipher.doFinal(cipherData);
            String decrypted = new String(decryptedBytes);

            Log.i("Decrypted", decrypted);

        return decrypted;
    }catch(Exception e){
        System.out.println(e.getMessage());
    }
    return null;
}
4

1 回答 1

3

您的问题是,text如果您想使用文本表示(String在您的情况下)传输密文(仅在您的代码中),则需要对密文进行编码/解码。

尝试在此站点上查找 base 64 编码,应该有很多关于它的信息。加密后编码,解密前解码。您还应该为纯文本指定特定的字符编码。

最后,您可能应该使用对称密码进行加密,并使用 RSA 加密对称密钥。否则,您可能会用完 RSA 计算中的空间,因为公钥无法加密大于其模数(密钥大小)的数据。

于 2013-02-22T13:14:12.030 回答