0

我做了一个替换密码,它生成随机字典,用它替换纯文本字符。

这是代码:

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的初学者,所以请帮我写代码。

4

1 回答 1

1

在我看来,您只需消除以下行:

random.shuffle(arr)

因为这是在每次运行代码时生成一个新垫的原因。将该行替换为每个索引的给定值数组,0-25;我想你可以选择,即 arr= [5,2,20...]

于 2013-07-05T20:53:59.643 回答