暗号化のコンテキストでは、バイト配列を文字列に変換したり逆に変換したりすると、値の不一致が発生することが多く、課題が生じる可能性があります。そして復号化エラー。ここでは、これらの問題の調査と詳細な解決策を説明します。
次の暗号化シナリオを考えてみましょう:
public class NewEncrypter { // Encryption and decryption are performed on byte arrays, not strings public byte[] encrypt(String input) throws Exception { cipher.init(Cipher.ENCRYPT_MODE, key); return cipher.doFinal(input.getBytes("UTF-16")); } public String decrypt(byte[] encryptionBytes) throws Exception { cipher.init(Cipher.DECRYPT_MODE, key); return new String(cipher.doFinal(encryptionBytes), "UTF-16"); } }
ただし、暗号化されたデータを文字列として保存することは、人間が判読できるようにすることを目的としているため、推奨されません。任意のバイナリ データではなく、テキストです。それが避けられない場合は、バイトと文字の間の 1 対 1 マッピングのエンコーディングを使用することが重要です。
ISO-8859-1 エンコーディング
この特定のシナリオの場合、ISO-8859-1 エンコーディングは次のとおりです。推奨:
String decoded = new String(encryptedByteArray, "ISO-8859-1"); byte[] encoded = decoded.getBytes("ISO-8859-1");
一般的なエンコーディングの落とし穴の回避
UTF-16 エンコーディングでは、次の理由で問題が発生する可能性があります。
代替エンコーディング
ISO-8859-1 が要件を満たしていない場合は、使用を検討してください。 16 進数または Base64 エンコーディング。ただし、これらは標準 API で定義されていないため、追加のヘルパー ライブラリが必要です。
これらのガイドラインに従い、適切なエンコードを使用することで、暗号化プロセスにおけるバイト配列と文字列の不一致を解決できます。
以上がバイト配列と文字列の間でデータを暗号化する際の変換の問題を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。