2010-12-07 72 views
0

我們被要求編寫一個DES algorithm(用於加密和解密)的Java實現。我有幾個問題:數據加密標準

  1. DES規定,應該有明文或者密文和準確56位共享密鑰的64位。什麼是給出字節數的方法,

  2. 該算法使用了很多位級別的操作,例如將64位分成兩個32位的部分。如何才能做到這一點?

+2

我敢肯定,哈里很快就會迴應...:P – st0le 2010-12-07 06:36:36

+0

那麼你有什麼嘗試,爲什麼它不工作?由於這是作業,你需要問一些小而特殊的問題。沒人能讀懂你的想法。 – 2010-12-07 13:34:49

+0

我讀過1和2 – Green 2010-12-08 10:22:20

回答

2

雖然這不是一個真正的回答你的問題,我不得不說:

實現加密算法自己是在大多數情況下,一個非常糟糕的主意。

讓我解釋一下:

  1. 密碼是很難的。很少有人能夠理解它,足以發明他們自己的算法,甚至他們尋求其他人的幫助來驗證它是否在一秒鐘內不會被破壞。

  2. 即使使用已被證明對某些意圖足夠好的現有算法,它仍然是一個壞主意,因爲微妙錯誤的可能性已經超過了足夠的可能性,從而破壞了本來安全的算法的實現。這已經發生了很多次,我失去了多久的計數。

  3. 即使您真的很幸運並且勤奮,並且需要一個完美的實施方案,但是浪費時間和資源,而不是使用已經開發,測試和驗證的現有實施方案。

以及圍繞DES字,但我希望你知道:純DES被認爲是今天的標準真的很弱。所以你應該實施更好的3DES。

編輯: OK,所有的談話後,並意識到這似乎是一個家庭作業後(感謝擡起頭),我挖了一個小到DES。這是我到目前爲止:

DES是一個塊密碼,在64位塊上運行。有幾種不同的modes of operation。他們決定如何將明文劃分爲64位塊。某些模式需要padding,這意味着您用數據填充最後一個數據塊,您可以在解密密文後將其刪除。上面的維基百科文章中的填充段落包含關於如何在DES中使用填充的說明。

這麼多的理論,如何去在Java中......

byte[] bytesOfString = clearTextString.getBytes(); 

這就給了你一個字節的爲你加密的字符串數組。其餘的是簡單的計數和添加...

我希望這個修改後的答案對你更有用。

0
  1. 現在你應該知道8位= 1字節。加密中的所有內容都可以在位上工作,除了定義緩衝區之外,您從不需要字節。

  2. 分裂使用bitwise operations。掩蓋下半部分的頂部位,移動頂部半部分。我假設你已經有了參考資料,儘管它們是非常寶貴的資源,但你必須知道按位操作是如何工作的。一個不會破壞項目的好資源是一種壓縮算法,比如CABAC,因爲它們同樣是面向位的。然後關閉標籤並嘗試使用該規格製作自己的標籤。