Шифр со всеми символами юникода

Я пытаюсь создать шифр с зашифрованным алфавитом, содержащим все возможные символы, включая юникоды, символы китайского / японского языков и т. Д.

Оказалось, что я могу напечатать до 65536 символов. Я создаю обычный алфавит с помощью словаря и списка номеров этих символов.

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)

person f.rodrigues    schedule 12.12.2013    source источник
comment
почему бы вам не использовать ord() также \ xe0 звучит как utf-8, а не unicode ... вам, вероятно, также нужно открывать свои файлы с флагом b ...   -  person Joran Beasley    schedule 12.12.2013
comment
Спасибо, удалось разобраться. Не знал о флаге "b".   -  person f.rodrigues    schedule 12.12.2013
comment
К вашему сведению, никогда не пытайтесь защитить что-нибудь важное самодельным ципером.   -  person John Gietzen    schedule 12.12.2013
comment
Обратите внимание, что вы используете только кодовые точки BMP (например, от U + 0000 до U + FFFF). Unicode варьируется от U + 0000 до U + 10FFFF, так что вам не хватает около миллиона кодовых точек :)   -  person Mathias Bynens    schedule 12.12.2013