使用DES實現真實資料加密的前奏(分析)

來源:互聯網
上載者:User

上篇文章裡面用java實現了DES的核心演算法,並且對外提供了一個比較簡單的介面,可以直接使用,不過有一個問題就是這個演算法只是核心,只能實現對64位二進位進行加密。所以要在實際狀況下使用的話需要進行預先處理才行。

所謂預先處理就是把真是的資料,比如字串,資料,等不定長的內容轉換成分組的每組64位位元據組。然後再進行區塊編碼器,最後結果合并得到加密資料,當然了,為了不讓別人看出來最後的二進位密文,你可以把這些分組的資料再轉換成字串或者什麼格式的就行了。

預先處理過程:
1. 轉換成每組8位的byte數組
首先將字串進行轉換,轉換成byte數組,並且數組長度要是8的整數倍,因為要按照8位來分組。不夠8位的要補齊8位。並且填充位賦值為它所缺少的位元。

2. 把8位的byte數群組轉換成為64位的位元組
先要保證byte數組中的每個byte位都要大於0,這樣在進行二進位轉換的時候才不會出問題。如果小於0需要進行變換,因為每個byte是8bit,在轉換成的時候不需要考慮符號位,因此如果小於0需要對其加256(即2的8次冪),這樣轉換成二進位。至於怎麼轉換成二進位你可以參考上篇文章裡面的原始碼,這裡貼出來一點:

//把產生的8個數字轉成二進位存到sValue中
for (int j = 0; j < 4; j++) {
sValue[((i * 4) + 3) - j] = sBoxData[i] % 2;
sBoxData[i] = sBoxData[i] / 2;
}

3. 在進行解密的時候要把填充位去掉
在上面步驟中為了滿足八位的需求對不夠八位的進行了補齊操作,因此在解密時需要把填充位去掉。那麼去掉多少填充位呢?根據擴充時對填充位的賦值可以得到填充了多少位。(這裡我計算了半天,發現其實很簡單,因為你填充位進行加密之後再解密資料還是一樣的。)這樣就得到瞭解密後的序列,然後轉換成字串或者是其他需要的格式就ok了。

這樣基礎部分就分析完了,剩下工作就是用java實現了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.