密码与所有unicode字符

时间:2013-12-12 03:57:21

标签: python unicode encryption keyerror

我正在尝试使用包含所有可能字符的乱码字母创建一个密码,包括unicodes,chinease / japanease符号等...

我发现我最多可以打印65536个字符。我正在用dict和这些字符的数字列表构建常规字母表。

alphabet = { }
numeral = []
for n in xrange(65536):
    alphabet[unichr(n)] = n
    numeral.append(n)

至于密码:

cipher_alphabet = { }
for char in alphabet:
    cipher_alphabet[char] = choice(numeral)
    numeral.remove(cipher_alphabet[char])

要创建密钥/密码,我正在使用random.seed(密钥)。

问题是,当我尝试使用dict来比较包含unicode字符的文件中的输入时,它会给我:

KeyError: '\xe0'
�

在该文件中,此字符为“à”。

加密部分是这样的:

message = open(file+'.txt').read()
crypted_message = ""
for word in message:
    for char in word:
        letter = cipher_alphabet.keys()[cipher_alphabet.values().index(alphabet[char])]
        crypted_message += letter

我设法使用:

使用commom可打印字符
for n in xrange(32, 127):
    alphabet[chr(n)] = n

但如果我将chr()更改为unichr(),它会给我这些错误。

任何提示?

另外,我读过seed()不是一个很好的加密方法,也有任何提示吗?

编辑:

感谢@Joran设法让它发挥作用。

对于那些有兴趣的人......我改变了一些代码。

表示字母:

for n in xrange(0, 65536):
    alphabet[n] = unichr(n)
    numeral.append(n)

用于密码:

for x in alphabet:
    num = choice(numeral)
    crypted_alphabet[num] = alphabet[x]
    numeral.remove(num)

加密部分:

message = open(file+'.txt','rb').read()
for n in message:
    num = alphabet.values().index(crypted_alphabet[n])
    crypted_message.append(num)

0 个答案:

没有答案