1

Android プロジェクト (RSA 暗号化/復号化) にエラーがあります。暗号化は成功しましたが、暗号化されたテキストを復号化しようとすると、「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;
}
4

1 に答える 1

3

あなたの問題はtext、テキスト表現を使用して暗号文を転送する場合(Stringあなたの場合)、暗号文を(コード内で)エンコード/デコードする必要があることです。

このサイトで base 64 エンコーディングを調べてみてください。それに関する多くの情報があるはずです。暗号化後にエンコードし、復号化する前にデコードします。また、平文に対して特定の文字エンコーディングを指定する必要があります。

最後に、おそらく対称暗号で暗号化し、RSA を使用して対称鍵を暗号化する必要があります。そうしないと、RSA 計算内でスペースが不足する可能性があります。これは、公開キーがそのモジュラス (キー サイズ) よりも大きいデータを暗号化できないためです。

于 2013-02-22T13:14:12.030 に答える