バイト配列から文字列への変換と再変換の困難
質問:
なぜ文字列をバイト配列から変換して戻した後に得られたバイト配列が元のバイト配列と異なるため、復号化エラーが発生しますか?
解決策:
暗号化されたデータを文字列としてエンコードすると、文字列エンコーディングの性質により問題が発生します。バイナリ データの場合は、バイト配列の使用をお勧めします。ただし、文字列の保存が必要な場合は、ISO-8859-1 など、バイトと文字の間で 1 対 1 のマッピングを行うエンコーディングを選択する必要があります。 UTF-16 などのエンコーディングを使用すると、追加されたバイトオーダー マーカーによってデータ損失が発生したり、曖昧な文字マッピングが発生する可能性があります。
次の例を考えてみましょう:
String decoded = new String(encryptedByteArray, "ISO-8859-1"); byte[] encoded = decoded.getBytes("ISO-8859-1");
ISO-8859 を使用する-1 は、元のバイト配列を保持し、正しい復号化を保証します。
UTF-16 は次の理由で失敗します。
以上がバイト配列を文字列に変換して戻すと、復号化中にデータが失われるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。