バイト配列を文字列に変換し、バイト配列に戻す際の問題
このトピックについては数多くの議論にもかかわらず、一部の人にとって根強い課題が残っています。バイト配列を文字列に変換し、バイト配列に戻すと、バイト配列の不一致は生じません。この問題は、個人が暗号化されたデータをバイト配列ではなく文字列として操作しようとした場合に表面化します。
提供されたコード例では、バイト配列を使用すると暗号化と復号化のプロセスがスムーズに動作します。ただし、バイト配列を文字列に変換し、その逆を行うと、結果のバイト配列は元のものとは異なります。その結果、復号化プロセスは失敗します。 UTF-8 や UTF-16 などのいくつかの文字列エンコーディングはテストされましたが、成功しませんでした。
矛盾を理解する
根本的な問題は文字列の性質に起因していますそしてバイト配列。文字列は、生のバイナリ データではなく、人間が読めるテキストを表すように設計されています。暗号化されたデータを文字列に保存すると、不一致が生じる可能性があります。
データ損失の回避
変換中のデータ損失を防ぐには、1 を維持するエンコーディングを使用することが重要です。バイトと文字間の 1 対 1 マッピング。そのようなエンコーディングの 1 つが ISO-8859-1 で、すべてのバイト シーケンスが特定の文字シーケンスに対応すること、およびその逆が保証されます。
ISO-8859-1 による最適化コード
主な 2 つの理由で失敗する UTF-16 の問題を解決するために、次のコードの抜粋は、 ISO-8859-1:
String decoded = new String(encryptedByteArray, "ISO-8859-1"); System.out.println("decoded:" + decoded); byte[] encoded = decoded.getBytes("ISO-8859-1"); System.out.println("encoded:" + java.util.Arrays.toString(encoded)); String decryptedText = encrypter.decrypt(encoded);
以上がバイト配列を文字列に変換したり、その逆に変換したりするとデータが失われるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。