【問題E19】:DES加密法            [回前頁]

Linux是一個多人多工的作業系統,由於有很多人共用,所以密碼就顯得很重要,而在整個Linux系統中,幾乎都是開放原始碼(Open Sourec)但有一個地方是美國國家安全局基於國家安全而列為機密的文件,就是在DES中的替換盒程式。DES(Data Encryption Standard)是在1977年由IBM公司所發表,在1977年被聯邦政府列為數據加密標準,由於加、解密的速度非常的快速,因此十分受商業界青睞。但也因此在安全性上受到某些質疑,但DES在密碼學中也站有重要地位,才會20多年後的今日仍有DES的應用且公認為安全的系統。應用上主要的改良是將密碼的長度由 56bits 增長為 256bits。

在傳統的加密法主要由兩個動作所組成,一是換位,另一是代換,不論多複雜方法,都是如此。換位就是 good=>doog,代換就是先準備對照表,再依表代換每個文字(例如最簡單的 fire=> gjsf)。而DES加密法的原理亦是如此。其中為了將64bit的資料位置打散,所以準備了一個8*8的對照表,在上面填上1~64的數字,代表將要放入的bit,來打散原來的資料。再加上16回合的加密(解密)過程而成。現在為了簡化問題,我們假設原來輸入的是16bit的資料,而且只有考慮打亂順序的部分。請參考4*4的位置變換對照表,來將原資料打散。並將打散後的結果印出。

輸入檔案格式:第一行是一個整數 K, 表示有K組測試資料。而接下來有K組樣本。在每個樣本的行數都是五行,其中的第一行是輸入的16個字的密文(由a到z)(A到Z)(./)(0到9)共有64種可能字元所組成),接下來的四行,各有四個數字,所以共有16個 1到16的數字。(剛好各寫一次)

輸出檔案格式:如果有K組輸入,也就應有K組的輸出(每組一行)。將放入的原密文按照先印完水平行再印下一水平行直到印完16個字元。

〔輸入檔範例〕

2

1234567890abcdef

4 3 2 1

16 15 14 13

5 6 7 8

9 10 11 12

./WR56Z890abcdef

4 3 2 1

12 15 14 13

5 6 7 8

9 10 11 16

〔輸出檔範例〕

4321fedc567890ab

RW/.bedc56Z890af