Блочный шифр Python unichr() Форматирование вывода Проблемы

Я пытаюсь написать скрипт на Python, который может шифровать и дешифровать текст с помощью блочного шифра, но я получаю совершенно пустые результаты. После попытки отследить источник проблемы, я понял, что после выполнения битовой операции XOR (a^b) мой сценарий не может преобразовать новое значение ascii в символ.

def blockcrypt(text,key):
    rawkeylist = rawintkey(key)
    textlist = asciitextlist(text)
    answer=''
    kli = 0
    for element in textlist:
        answer+=str(unichr(element^rawkeylist[kli]))
        kli+=1
        if kli==len(rawkeylist):
            kli=kli%len(rawkeylist)
    return answer

Где rawkeylist - это оригинальный ключ, преобразованный в список значений ascii (в десятичной форме) для каждого символа. И textlist - это текст, преобразованный в список десятичных значений ascii для каждого символа. Я уже использовал print, чтобы подтвердить, что они выводят правильные списки.

Проблема в том, что для нескольких входов, которые я пробовал, ответ не получен. Что еще более важно, подставив print в разные места, я обнаружил, что str(unichr(element^rawkeylist[kli])) ничего не выводил, после небольшого исследования unichr я обнаружил, что на самом деле он выводит u'_____' (с _____ выступая в качестве заполнителя для чего угодно).

Я мог просто не преобразовывать свои значения ASCII обратно в символы, но это не самое инновационное решение. Я также очень сомневаюсь в эффективности использования строки, чтобы добавить к моему ответу. Наконец, я просто перебираю символы моего ключа при применении шифра, и после некоторого исследования я услышал о чем-то, называемом заполнением, которое я считаю необходимым использовать.

Так что, пожалуйста, помогите, я думаю.

1 ответ

Вы можете либо продолжать обрабатывать зашифрованный текст как байты (вы можете хранить двоичные файлы или отправлять двоичные данные, например, по HTTP), либо вы можете закодировать его в текст, используя основную 64 или шестнадцатеричную кодировку. Перед расшифровкой вы должны, конечно, декодировать строки обратно в двоичный зашифрованный текст.

Другие вопросы по тегам