我一直在尋找重複密鑰異或密碼的代碼,我無法掌握代碼的某些功能。據我所知,密鑰的每個字節應該與字符串消息的每個字節一起使用,並且應該在它們之間應用XOR操作。要做到這一點,你似乎只需要迭代字符串的長度,遍歷每個字節的字節並應用XOR操作。發生器用於重複密鑰異或密碼時的混淆
由於某些原因,代碼使用生成器函數(在另一個函數內部)遍歷該鍵。該函數的一個實例被創建並保存在一個變量中,然後與該消息的字節值列表一起壓縮,然後應用XOR操作。
我沒有得到的是,因爲此函數循環while TRUE
zip函數將如何在兩個列表之間的每對字節之間生成元組?也許我誤解了發電機的功能,但這可以解決嗎?
下面是函數:
def mc_part5():
def cycle_key(key):
idx = 0
while True:
yield ord(key[idx%len(key)])
idx += 1
g = cycle_key('ICE')
s = "Burning 'em, if you ain't quick and nimble\nI go crazy when I hear a cymbal"
hh = bytes(s,'ascii')
xored = bytes([a^b for (a,b) in zip(hh, g)])
c = '0b3637272a2b2e63622c2e69692a23693a2a3c6324202d623d63343c2a26226324272765272a282b2f20430a652e2c652a3124333a653e2b2027630c692b20283165286326302e27282f'
expected = bytes.fromhex(c)
assert(xored == expected)