python中的替换编码

时间:2013-07-05 20:19:10

标签: python

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

以下是代码:

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

1 个答案:

答案 0 :(得分:1)

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

random.shuffle(arr)

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