搜尋

首頁  >  問答  >  主體

java - 为什么des加密后输出乱码?

大家讲道理大家讲道理2770 天前1098

全部回覆(8)我來回復

  • PHPz

    PHPz2017-04-18 10:11:45

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

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-18 10:11:45

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

    回覆
    0
  • 高洛峰

    高洛峰2017-04-18 10:11:45

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

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

    是亂碼就對了

    回覆
    0
  • 黄舟

    黄舟2017-04-18 10:11:45

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

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:11:45

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

    回覆
    0
  • PHPz

    PHPz2017-04-18 10:11:45

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

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 10:11:45

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

    回覆
    0
  • 怪我咯

    怪我咯2017-04-18 10:11:45

    加密後可以再 Base64,

    回覆
    0
  • 取消回覆