在加密環境中,將位元組數組轉換為字串並傳回可能會帶來挑戰,通常會導致值不符和解密錯誤。以下是對這些問題的探索和詳細的解決方案。
考慮以下加密場景:
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"); } }
但是,不鼓勵將加密資料儲存為字串,因為它們的預期用途是供人類可讀文本,而不是任意二進位資料。如果不可避免,那麼使用位元組和字元之間一對一映射的編碼至關重要。
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 不符合您的要求,請考慮使用十六進位或base64 編碼。但是,這些需要額外的幫助程式庫,因為它們沒有在標準 API 中定義。 遵守這些準則並使用適當的編碼,您可以解決加密過程中位元組數組和字串之間的差異。以上是加密位元組數組和字串之間的資料時如何避免轉換問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!