2015-12-03 96 views
1

我試圖創建一個Python Ciphersaber 2實現,因爲我在網上找到的那些看起來會產生亂碼。在解密期間,我需要能夠使用由整數值表示的密鑰流對字符串的單個字符進行異或,然後將該結果轉換回字符串字符。請注意,我對Python完全陌生,因此無視我可怕的失敗。如何在Python中使用int來異或字符串字符?

事情我試過到目前爲止:

plaintext[i] = ord(msg[i]^keystream[i] plaintext[i] = str(plaintext[i])導致整數值

plaintext[i] = ord(msg[i]^keystream[i] plaintext[i] = chr(plaintext[i])導致整數y,\固定的\ XF4 \ X07。這些字節值是什麼?

得到任何幫助

回答

0

字符串由ASCII值(UTF-8是精確的)的計算機表示。如果你想XOR的明文字符和密鑰流,我確實建議你把它轉換成26的範圍。

E.g. ORD( 'A')爲97 & ORD( 'B')是98在ASCII

ord('a')^ord('b') = 97^98 = 3 
Note: 3 in ASCII is not an alphabet 
a-z lies in range 97 - 122 
A-Z lies in range 65 - 100 

嘗試將它們轉化成26第一範圍(使用ord( 'a')的對於小寫字母和ord('A')對於大寫字母爲模)。生成密碼 - 第1步

ord('a') % 97 = 0 
ord('b') % 97 = 1 
0^1 = 1 

現在,加上前面的結果爲ord( 'A'),然後將其轉換成字符。生成密碼 - 第2步

chr(ord('a') + 1) = chr(97 + 1) = chr(98) = 'b' 

同樣,你可以逆轉的過程中解密

P.S.我不知道Ciphersaber算法。