0
我試圖在python中爲學習目的實現簡化的DES,但我很難搞清楚如何根據「時間表」進行排列。本質上,我有一個適當的排列組合,我需要位移到正確的位置。按計劃排列python
例如,使用鍵:
K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001
請問57st位移動到第一個位點,第49位到第二位點等。 ..
K + = 1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111
當前代碼:
def keyGen(key):
PC1table = (57, 49, 41, 33, 25, 17, 9,
1, 58, 50, 42, 34, 26, 18,
10, 2, 59, 51, 43, 35, 27,
19, 11, 3, 60, 52, 44, 36,
63, 55, 47, 39, 31, 23, 15,
7, 62, 54, 46, 38, 30, 22,
14, 6, 61, 53, 45, 37, 29,
21, 13, 5, 28, 20, 12, 4)
keyBinary = bin(int(key, 16))[2:].zfill(64)
print keyBinary
permute(PC1table, keyBinary)
def permute(permutation, permuteInput):
elements = list(enumerate(permutation))
for bit in permuteInput:
***magic bitshifting goes here***
keyGen("133457799BBCDFF1")
我認爲會工作的邏輯是列舉排列的元組,並且對於我的舊密鑰的每一位,查看枚舉以查找與該位對應的索引,並移位適當的次數,但我無法弄清楚如何去做這件事。這可能是我從錯誤的角度接近問題,但任何指導將不勝感激!
當你說「會把第57位移到第一位點」時,你說你創建了一個新的二進制數,它的位來自初始值的權利? – Ketouem
Ketouem,這是正確的。使用原始密鑰K並將其排除在「PC1Table」上產生新密鑰K +, K + = 1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111 – ph34r