2016-10-29 87 views
0

我正在使用Python中的DES算法。Python二進制字符串轉換

在其中一個功能即Fiestle函數中,我必須使用XOR元素來獲取密碼。

是否有任何方式我可以執行在python換檔操作,下面是我嘗試的代碼:

C0是1111000011001100101010101111

D0是0101010101100110011110001111

c0_d0=[] 
for i in range(1): 
    t=[] 
    t.append(C0) 
    t.append(D0) 
    c0_d0.append(t) 

#print c0_d0 

def str_to_bin(strr,shifts): 
for i in range(1,17): 
    temp=[] 
    for j in range(1): 
     temp.append(int(c0_d0[i-1][0])<<1) 
     temp.append(int(c0_d0[i-1][1])<<1) 
    c0_d0.append(temp) 

return c0_d0 

我得到的輸出是如:enter image description here

我想要的元素是一個二進制的字符串,通過移位bits.That是第一個元素對是通過移動前一個元素對獲得的,下一個元素對是由前一個元素獲得的,等等。只給出第0個索引元素。

例 C0是1111000011001100101010101111 D0是0101010101100110011110001111

C1應該C0 < < 1,其等於1110000110011001010101011110

D1應D0 < < 1,其等於1010101011001100111100011110

+0

你想轉移一個二進制字符串?我想大小是28位(你沒有指定大小,在Python中你不能依賴於int內部表示)。在這種情況下,試試這個:'C1 = C0 [1:] +「0」'。但是你的問題真的不清楚。 –

+0

要執行二進制操作,請使用整數或字節數組(有效地整數列表)。使用字符串操作既不舒適也不有效。 –

回答

0

嘗試不使用十進制或字符串編碼的二進制;按原樣使用數字會更加高效和一致,並且Python支持將它們轉換爲其他基礎或從其他基礎轉換它們。

>>> C0=0b1111000011001100101010101111 
>>> bin(C0<<1) 
'0b11110000110011001010101011110' 

你會想,雖然限制你在某一點大小,如Python有任意大整數(在Python 2名爲long支持,這是將L來自於你的輸出,或者乾脆int在Python 3)。這通常通過位掩碼完成。如果您想在特定的基礎中顯示結果,您也可以使用特定的寬度進行格式設置。

>>> bin(C0 & ((1<<16)-1)) # truncate to 16 bits 
'0b1100101010101111' 
>>> '{:032b}'.format(C0) # format as 32 digit binary string 
'00001111000011001100101010101111' 

特別不切實際的是您的示例輸出混合了字符串和數字形式的數據。

下面是一個如何從字符串解析二進制文件的例子,以防您的程序收到該文件作爲輸入,以及更直接的格式化方法。

>>> D = int('0101010101100110011110001111', 2) # parse as binary = base 2 
>>> D 
89548687 
>>> format(D, '032b') 
'00000101010101100110011110001111' 
0

你左移的定義不是標準的(乘以2)。你可以很容易地用字符串來模擬它:

C = '1111000011001100101010101111' 
D = '0101010101100110011110001111' 

def shstr(string): 
    return string[1:]+'0' 

zeroes = ''.join(['0' for _ in range(len(C))]) 
while C != zeroes or D != zeroes: 
    print C,D 
    C = shstr(C) 
    D = shstr(D) 

或者把它放到一個函數中併產生。

+0

在x86上提及整數溢出標誌(並且在答案中缺少解決方案)會很好,至於我 – agg3l

+0

你是什麼意思?你期望溢出的地方在哪裏?這裏的字符串很短(上面的解決方案中沒有整數,只有字符串)。 – kabanus

+0

如提問者所述,DES算法不是用字符串操作實現的,不是嗎?移動字符串和移動整數差異很大(應該非常小心地解釋結果)。此後,我已經提到你的解決方案有其細微的差別 – agg3l

相關問題