光阴似箭催人老,日月如移越少年。
因為已經不是UTF-8字串資料了,親。你加密了啊。 DES產生的是不可讀的二進位數據,你強行用new String依照UTF-8編碼解釋,當然是亂碼了,如果能直接讀出來,要加密何用? 因為大多數基於數學演算法加密的數據,產生的都是二進位區塊或流資料。只有解密了才能讀到原文。 如果你希望加密後的資料能夠儲存為文字或HTTP傳輸,你可以將資料用BASE64編碼,編碼後就是ASCII字串,不會亂碼了(當然人還是看不懂)。
加密後是位元組數組,不是所有位元組數組都可以透過new String()轉換成字串的
這可能是你沒有理解內存字節數據流與字符串的區別如果你使用文本編輯器16進制顯示查看過數據, 那麼你就不會有此疑問了.String為什麼能顯示出字符串, 那是因為記憶體資料符合一定編碼規則的記憶體資料, 例如UTF-8編碼.但一般des加密後的資料都是一些完全的記憶體資料流, 他是不符合字串編碼規則的, 所以你強行用字串編碼規則去解析它時, 就會變成"亂碼".
但加密的目的不正就讓人看不懂嗎?
是亂碼就對了
加密後就應該是讀不懂的東西。
這裡有類似的文章 https://segmentfault.com/q/10...
為什麼你會以為不是亂碼呢?
加密後一般是byte數組,轉換為16進制的字串就可以了啊
加密後可以再 Base64,
因為已經不是UTF-8字串資料了,親。你加密了啊。 DES產生的是不可讀的二進位數據,你強行用new String依照UTF-8編碼解釋,當然是亂碼了,如果能直接讀出來,要加密何用?
因為大多數基於數學演算法加密的數據,產生的都是二進位區塊或流資料。只有解密了才能讀到原文。
如果你希望加密後的資料能夠儲存為文字或HTTP傳輸,你可以將資料用BASE64編碼,編碼後就是ASCII字串,不會亂碼了(當然人還是看不懂)。
加密後是位元組數組,不是所有位元組數組都可以透過new String()轉換成字串的
這可能是你沒有理解內存字節數據流與字符串的區別
如果你使用文本編輯器16進制顯示查看過數據, 那麼你就不會有此疑問了.
String為什麼能顯示出字符串, 那是因為記憶體資料符合一定編碼規則的記憶體資料, 例如UTF-8編碼.
但一般des加密後的資料都是一些完全的記憶體資料流, 他是不符合字串編碼規則的, 所以你強行用字串編碼規則去解析它時, 就會變成"亂碼".
但加密的目的不正就讓人看不懂嗎?
是亂碼就對了
加密後就應該是讀不懂的東西。
這裡有類似的文章 https://segmentfault.com/q/10...
為什麼你會以為不是亂碼呢?
加密後一般是byte數組,轉換為16進制的字串就可以了啊
加密後可以再 Base64,