0

byte[]タイプを からにString、次に からStringに変更するのに小さな問題がありbyte[]ます。コードを使用すると、「RSA ブロックのデータが多すぎます」という RSA エラーが返されます。しかし、元の を使用すると、byte[]正常に動作します。

これがどのように機能するかです:

cipherData = cipher.doFinal(cipherData);

データ型を変更しようとしました:

// Byte[] to String
String encrypted = new String(cipherData, "UTF-8");
// RSA Operation
cipherData = cipher.doFinal(encrypted.getBytes());
4

2 に答える 2

7

これが問題です:

String encrypted = new String(cipherData, "UTF-8");

UTF-8 でエンコードされたテキストではありませcipherData ん。任意のバイナリデータです。したがって、 UTF-8 テキストであるかのよう解釈しようとしないでください。

代わりに、16 進数または base64 を使用します。base64 がおそらく最も簡単な方法です。パブリック ドメインの iHarder base64 ライブラリが気に入っています。

String encrypted = Base64.encodeBytes(cipherData);
...

cipherData = Base64.decode(encrypted);

編集:もちろんAndroidを使用している場合は、組み込みライブラリを使用してください:)

于 2013-04-04T16:58:09.677 に答える
0

私は完璧に働いています。Android Base64 ライブラリのコードは次のとおりです。

String encrypted = Base64.encodeToString(cipherData, Base64.DEFAULT);
cipherData = cipher.doFinal(Base64.decode(encrypted, Base64.DEFAULT));
于 2013-04-04T17:09:28.967 に答える