我的Android应用程序存在一些问题。我正在尝试与RSA加密/解密相关的应用程序。这是我的问题:

我可以清楚地加密简短的句子,但是当我尝试将此消息解密为原始文本时,我给出了一个错误(“RSA块数据太多”)。而且如果我想加密一个长句子,我也有同样的错误。我进行了一些搜索以查找问题,并在以下站点找到了一些解决方案:

Site 1

Site 2

Site 3

但是我什么都不懂,这些解决方案太复杂了。我该如何解决这个问题,谁能给我一个更简单的解决方案?谢谢。

编辑:
这些是我用于该项目的代码块。

public String RSAEncrypt(String plain) throws NoSuchAlgorithmException, NoSuchPaddingException,InvalidKeyException, IllegalBlockSizeException, BadPaddingException, InvalidKeySpecException, UnsupportedEncodingException {

    publicKey = getPublicKey();
    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.ENCRYPT_MODE, publicKey);
    byte[] cipherData = cipher.doFinal(plain.getBytes());
    return Base64.encodeToString(cipherData, Base64.DEFAULT);
}

public String RSADecrypt(byte[] encryptedBytes) throws NoSuchAlgorithmException, NoSuchPaddingException,InvalidKeyException, IllegalBlockSizeException, BadPaddingException, InvalidKeySpecException, UnsupportedEncodingException {

    privateKey = getPrivateKey();
    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.DECRYPT_MODE, privateKey);
    byte[] cipherData = cipher.doFinal(encryptedBytes);
    return Base64.encodeToString(cipherData, Base64.DEFAULT);
}

最佳答案

RSA只能加密比密钥对的模数短几个字节的消息。多余的字节用于填充,确切的数字取决于您使用的填充方案。

RSA用于密钥传输,而不用于数据加密。如果有很长的消息,请使用随机密钥使用AES对其进行加密。然后,使用邮件收件人的公共(public)密钥,用RSA加密AES密钥。您应该使用Cipher类的wrap()unwrap()方法。

这就是PGP,S / MIME,TLS(大致)和任何其他正确设计的RSA加密方案的工作方式。

07-24 09:47
查看更多