2015-11-04 18 views
-1

目前在Python中使用Vigenere密碼,而我和我班的許多人都陷入了一個方面。將某些數字加在一個字符串/列表中,然後轉換成字母

當我們將關鍵字翻譯成序號後,我們需要將這些編號添加到消息中進行加密。這是我的代碼到目前爲止。

Input = input('Enter your message: ') 

key = input('Enter the one word key: ') 

times = len(Input)//len(key)+1 

encryptedKey = (times*key)[:len(Input)] 

output = [] 
for character in Input: 
    number = ord(character) - 96 
    output.append(number) 

outputKey = [] 
for character in encryptedKey: 
     numberKey = ord(character) - 96 
     outputKey.append(numberKey) 

print(encryptedKey) 

print(outputKey) 
print(Input) 
print(output) 

所以,如果輸入的是'hello',關鍵是'bye',關鍵字將成爲'byeby'[2,25,5,2,25]'hello'[8,5,12,12,15]。我無法想出一個方法來添加第一個28,255,等等。

我試過print(sum(output + outputKey)),但當然這只是將所有數字加起來,這意味着答案是111

我也需要他們回到字母,以便它結束與加密的消息。

謝謝!

+0

爲什麼不是a:for len in(keyword):loop? – ergonaut

+1

我懷疑你想'拉鍊'... – jonrsharpe

+0

@idjaw不是這個問題的重複,無論如何。像這樣的Vigenere密碼的重點是模塊算術,即使OP還沒有意識到它。 – BlivetWidget

回答

0

你是從正確的開始。你已經將你的信息和密碼翻譯成數字。

keyphrase = [2,25,5,2,25] 
message = [8,5,12,12,15] 

現在您需要將它們和模數26相加,以便您的答案仍然是a-z。

encrypted = [(keyphrase[i] + message[i])%26 for i in range(len(message))] 
>>> encrypted 
[10, 4, 17, 14, 14] 

現在,你需要把這些回字母:

''.join(chr(c + 96) for c in encrypted) 
'jdqnn' 

然後你可以走另一條路恢復消息:

message = [(encrypted[i] - keyphrase[i])%26 for i in range(len(encrypted))] 
>>> message 
[8, 5, 12, 12, 15] 
>>> ''.join(chr(c + 96) for c in message) 
'hello' 

的A位僅供參考,對於計算機密碼學,特別是使用Python或C語言的計算機,通常是以0開始計數的標準。所以'a'是0,'b'是1等等。你從1開始,沒關係,只是意識到這一點。

+0

謝謝,超級有用。現在我只需要弄清楚如何確保符號不會被加密!仍然習慣使用.isalpha! – AnimeDeamon

+0

@AnimeDeamon'.isalpha()'當然可以讓你到你想去的地方。如果你需要我的建議,我不僅會'不加密'符號,在你加密它之前,我會把它從消息中抹去。在任何真正的密碼系統中,您都希望對發送的任何內容進行加密,這意味着要麼對標點符號進行加密,要麼對Vigenre密碼進行加密(只對字母進行操作),將其保留。將它們留在未加密的地方會提供很多信息。 – BlivetWidget

+0

我的老師說,儘管我明白了,但我必須簡化一下,以便讓她更容易理解 - 將其放入多行。 我嘗試過,但它有點搞砸了我編碼的其餘部分。 – AnimeDeamon

0

您也可以嘗試這樣的(僞):

int j = 0 
for int i = 0; i < output.len(); i++ 
    print output[i] + outputKey[j] 
    j++ 
    if j > outputKey.len() 
     j = 0 

這樣的話,而不是從[B,Y,E]你的陣列擴展到[B,Y,E,B,Y]您只需計算一次密鑰並根據需要使用其索引來循環使用其他值。

相關問題