java - 为什么des加密后输出乱码?
大家讲道理
大家讲道理 2017-04-18 10:09:45
0
8
1095
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(8)
PHPzhong

因為已經不是UTF-8字串資料了​​,親。你加密了啊。 DES產生的是不可讀的二進位數據,你強行用new String依照UTF-8編碼解釋,當然是亂碼了,如果能直接讀出來,要加密何用?
因為大多數基於數學演算法加密的數據,產生的都是二進位區塊或流資料。只有解密了才能讀到原文。
如果你希望加密後的資料能夠儲存為文字或HTTP傳輸,你可以將資料用BASE64編碼,編碼後就是ASCII字串,不會亂碼了(當然人還是看不懂)。

左手右手慢动作

加密後是位元組數組,不是所有位元組數組都可以透過new String()轉換成字串的

小葫芦

這可能是你沒有理解內存字節數據流與字符串的區別
如果你使用文本編輯器16進制顯示查看過數據, 那麼你就不會有此疑問了.
String為什麼能顯示出字符串, 那是因為記憶體資料符合一定編碼規則的記憶體資料, 例如UTF-8編碼.
但一般des加密後的資料都是一些完全的記憶體資料流, 他是不符合字串編碼規則的, 所以你強行用字串編碼規則去解析它時, 就會變成"亂碼".

但加密的目的不正就讓人看不懂嗎?

是亂碼就對了

黄舟

加密後就應該是讀不懂的東西。

伊谢尔伦

這裡有類似的文章 https://segmentfault.com/q/10...

PHPzhong

為什麼你會以為不是亂碼呢?

洪涛

加密後一般是byte數組,轉換為16進制的字串就可以了啊

刘奇

加密後可以再 Base64,

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板