バイト配列を文字列に変換して戻すと、復号化中にデータが失われるのはなぜですか?

Patricia Arquette
リリース: 2024-11-18 02:36:02
オリジナル
949 人が閲覧しました

Why Does Converting a Byte Array to a String and Back Result in Data Loss During Decryption?

バイト配列から文字列への変換と再変換の困難

質問:

なぜ文字列をバイト配列から変換して戻した後に得られたバイト配列が元のバイト配列と異なるため、復号化エラーが発生しますか?

解決策:

暗号化されたデータを文字列としてエンコードすると、文字列エンコーディングの性質により問題が発生します。バイナリ データの場合は、バイト配列の使用をお勧めします。ただし、文字列の保存が必要な場合は、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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート