我正在尝试使用包含所有可能字符的乱码字母创建一个密码,包括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)