2013-02-22 86 views
1

我的Android项目(RSA加密/解密)出现错误。 加密通过确定,但是当我尝试解密加密文本时,有错误:“RSA块的数据太多”Java Android错误“RSA数据块太多”

如何解决这个问题?

代码:

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; 
} 
+0

我对这个图书馆一无所知,但我的猜测是“文字”字符太多;太长。你可以尝试缩短它只是为了测试一小部分? – Sababado 2013-02-22 12:55:35

+0

@Perception除了它不是一个确切的重复,这个问题很难理解,并且很难从刚刚开始非对称加密/解密的人那里提取答案。 – 2013-02-22 13:16:50

+0

不,“太多的RSA数据块失败的数据。什么是PKCS#7”不能帮助我:( – user2095816 2013-02-22 13:28:01

回答

3

你的问题是,你需要编码/解码的密文(只text在你的代码),如果你想(在你的情况String),使用文本表示运送它。

试着在本网站上查找base 64编码,应该有很多关于它的信息。在解密之前进行加密和解码后进行编码。您还应该为明文指定一个特定的字符编码。

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

+0

)对不起,只好修复了一个有点混淆的错字,希望你不要介意我在你的RSA加密问题上扩展到 – 2013-02-22 20:38:30

+0

我不介意,谢谢编辑,实际的字节数实际上较低,因为填充是RSA安全所必需的。 – 2013-02-23 00:56:55