DES加密解密結果為何不一致?

我試了很多個在線DES加密解密工具,同一個字元串,加密後的結果都不一樣,請問這是為什麼呢?

難道是各自有各自的IV值?

我自己用c#編出個小程序用於加密解密,加密結果與所有在線加密結果也都不一樣。


這個要了解下DES的原理才行,

待續。。。。


謝邀

IV要伴隨著密文走的,解密時必須使用正確的IV。IV本身不要加密


這個問題主要涉及編碼、輸入格式、輸出格式、加密模式這幾個方面的問題,還有一些細節問題比如空格與回車。

首先是編碼問題,在線的編碼格式一般默認是UTF-8,因此如果網頁編碼不是UTF-8,則會導致加密的結果不一樣。因為DES演算法本質上是對二進位內容進行加密,同樣的文字經過不同的編碼映射成的二進位內容並不相同。

其次,是輸入格式問題。一般在網頁的輸入是文本格式(Plain Text),但是許多教程為了方便理解,寫的輸入格式是16進位,比如 DES演算法實例講解 這篇文章裡面主要用的是16進位格式作為講解,對於許多在線工具,明文和密鑰輸入用的是文本格式。因此,在輸入的時候一定要注意區分。

然後,是輸出格式的問題。有些在線加密工具輸出會自動進行Base64編碼,這樣結果和直接加密的結果完全不同。DES加密的密文是16進位格式的,無法一一對應成ASCII碼。密文要麼以16進位輸出,要麼輸出一堆亂碼,而Base64能將一個較長的16進位數組編碼為一個字元串,方便處理。

最後,是加密模式的問題。DES本身採用的是ECB(電子密碼本)模式,即將加密的數據分成若干組,每組的大小跟加密密鑰長度相同,這樣密文輸出完全由明文和密鑰決定。為了進一步加強安全性,有許多安全性擴展,就誕生了別的加密模式,比如加密塊鏈模式CBC、加密反饋模式CFB等等。不同的模式加密結果也會完全不同。

在附帶一點細節問題,即空格與回車的問題。尤其是在字元串處理的時候,有些字元串會帶回車換行(0x0D 0x0A),這會造成最後一個64位字元塊加密有些許差別。還有一些文本框自動(trigger)去除空格,就導致文本中的空格沒有被計算在內,導致加密不同。


推薦閱讀:

請推薦一些密碼演算法具體實踐的書籍?
橢圓曲線來數字簽名每次簽名都不一樣?
如果我隨意打出亂碼,可不可以用密碼學解出有意義的信息?
為什麼計算機科學如密碼學喜歡用 Alice 和 Bob 舉栗子?
問題:AES128和AES256主要區別和安全程度是多少?他們對於機器的消耗是怎樣的?兩者性能如何?實際開發如何選擇?

TAG:編程 | 密碼加密 | 密碼學 | 加密解密 | DES加密 |