0

サーバーに暗号化された文字列として送信する前に、JNCryptor ライブラリを使用して文字列を暗号化しています。これが私のコードです:

    String teststring = "Hello World";
    JNCryptor cryptor = new AES256JNCryptor();
    byte[] plaintext = teststring.getBytes();
    String password = "test";

    try {
        byte[] ciphertext = cryptor.encryptData(plaintext, password.toCharArray());

        String a = new String(ciphertext);
        return a;


    } catch (CryptorException e) {
        // Something went wrong
        e.printStackTrace();

        return "0";
    }

ただし、文字列「a」をサーバーに送信すると、認識できない文字がたくさん含まれています。これに関する説明を読みました :

文字列はバイナリ データの適切なコンテナーではなく、暗号文はバイナリ データです。特定の文字エンコーディングでは、すべてのバイトおよびバイト シーケンスが文字を表すわけではなく、表現できないバイトまたはシーケンスが見つかった場合、エラー文字に変換されます。明らかに、このエラー文字を一意のバイトまたはバイト シーケンスに変換することはできません (これは多対 1 のマッピングです)。

このアドバイスは正しいですか?その場合、byte[] を文字列に正しく変換するにはどうすればよいですか? サーバーに読み取り可能に保存できるようにするには?

4

1 に答える 1

4

バイト配列から文字列に変換する標準的な方法はありません。バイト配列をエンコードする必要があります。これを行う一般的な方法は、base64 エンコーディングです。base64 エンコーディングの仕組みの説明: http://en.wikipedia.org/wiki/Base64

次に、サーバーに到達したら、base64 でデコードして元のバイト配列に戻し、保存します。

于 2014-07-22T17:58:48.817 に答える