我制作了一个替换密码,它生成随机字典,用于替换纯文本字符。
以下是代码:
import random
alphabets=' ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789~!@#$%^&*()_+|:"<>-=[];,.?'
class HCPyEncoder:
def encode(self,plaintext):
length=len(alphabets)
arr=range(0,length)
random.shuffle(arr)
pad,cipher="",""
dictionary={}
for i in range(0,length):
pad=pad+alphabets[arr[i]]
dictionary[alphabets[i]]=alphabets[arr[i]]
for i in plaintext:
if i in dictionary:
i=dictionary[i]
cipher=cipher+i
return cipher,pad
def decode(self,ciphertext,pad):
dictionary={}
plaintext=""
for i in range(len(pad)):
dictionary[pad[i]]=alphabets[i]
for i in ciphertext:
if i in dictionary:
i=dictionary[i]
plaintext=plaintext+i
return plaintext
encoder=HCPyEncoder()
ciphertext,pad=encoder.encode("Psycho Coder")
plaintext=encoder.decode(ciphertext,pad)
print "Ciphertext : ",ciphertext
print "Plaintext : ",plaintext
但问题是每次它生成一个新的密钥或填充,所以如果秘密邮件发送给某人,则无法恢复。
所以我想给它一个固定的替换字典,而不是一个随机字典,它将用于生成每个密文。
我是python的初学者,所以请帮我解释一下代码。
答案 0 :(得分:1)
在我看来,您只需删除以下行:
random.shuffle(arr)
因为这是在每次运行代码时生成新填充的内容。将该行替换为每个索引的给定值的数组,0-25;我想你可以选择,即arr = [5,2,20 ...]