將位元組數組轉換為字串並返回位元組數組的問題
儘管對此主題進行了大量討論,但對於某些人來說,仍然存在一個持續存在的挑戰:轉換將位元組數組轉換為字串,然後返回位元組數組,而不會導致位元組數組不匹配。當個人嘗試將加密資料作為字串而不是位元組數組進行操作時,問題就會出現。
在提供的程式碼範例中,使用位元組數組時,加密和解密過程可以順利運作。但是,當將位元組數組轉換為字串並返回時,生成的位元組數組與原始位元組數組有所不同。因此,解密過程失敗。包括 UTF-8 和 UTF-16 在內的多種字串編碼已經過測試,但沒有成功。
理解差異
根本問題源自於字串的本質和位元組數組。字串設計用於表示人類可讀的文本,而不是原始的二進位資料。當加密資料儲存在字串中時,它會引入潛在的差異。
避免資料遺失
為了防止轉換過程中資料遺失,使用維護一個的編碼至關重要位元組和字元之間的一對一對應。其中一種編碼是 ISO-8859-1,它保證每個位元組序列對應於特定的字元序列,反之亦然。
使用ISO-8859-1 優化的程式碼
為了解決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中文網其他相關文章!