Программа шифрования Python ASCII - PullRequest
0 голосов
/ 26 августа 2018

Добрый день,

Я создал простую программу шифрования ASCII, и у меня есть только 3 вопроса об этом:

  1. Как я могу проверить, правильно ли введен ключ, и сказатьмоя программа не пытается расшифровать, если она была введена неправильно.
  2. Почему зашифрованный текст длиннее оригинала?
  3. Если бы я хотел зашифровать другие вещи, а не текст ASCII, насколько сложно это было быбыть?

Спасибо, вот мой код и результаты ниже:

import time
key = "This■isôthe╝key¦b££glkHPAfgbm(*&%$$*(■ô▀"
string = "Encryption the hell out of me, even if I repeatttttttt lettersssss you can't tell"

entext = ""
detext = ""
keycnt=0

print("Displaing Text to be Encrypted")
time.sleep(1)
print(string)
time.sleep(5)

#Loops through the string and the key and adds the ascii values together to create a Encrypted character
for sLetter in string:
    entext += chr(ord(sLetter) + ord(key[keycnt]))
    keycnt += 1
    if keycnt == len(key):
        keycnt =0


print("Displaying encrypted Text")
time.sleep(1)
print(entext)

#Resetting key position
keycnt=0

#Loops through the string and the key and subtracts the ascii values together to create a decrypted character
for sLetter in entext:
    detext += chr(ord(sLetter) - ord(key[keycnt]))
    keycnt += 1
    if keycnt == len(key):
        keycnt =0
time.sleep(2)

print("Displaying decrypted Text")
time.sleep(1)
print(detext)
time.sleep(1)

1 Ответ

0 голосов
/ 26 августа 2018

Прежде всего, добавление с символами ключа не является хорошим шифром, даже не хорошим шифром Цезаря или Вигенера. Для этого вам понадобится модульное дополнение: модуль 26 для обычного алфавита (но без прописных или строчных букв и других символов) или модуль 256 для байтов. В случае байтов вам потребуется случайное значение для каждого байта ключа.

В настоящее время ваш зашифрованный текст имеет смещение: если вы добавите символьное значение с 0x00 с ключом 0x00, то вы получите 0x00 в качестве байта зашифрованного текста. Проблема в том, что значение 0x00 равно , которое когда-либо достигается только с этой конкретной комбинацией в вашей схеме шифрования. Поэтому, если вы увидите значение 0x00, вы сразу узнаете значение ключа и текста.

Как я могу проверить, правильно ли введен ключ, и попросить мою программу не пытаться расшифровать, если он был введен неправильно.

Невозможно проверить, является ли значение ключа правильным или нет. Единственное, что вы можете сделать, это проверить, соответствует ли результат ожидания.

Современная криптография использует код аутентификации сообщения (MAC) для создания тега аутентификации. Этот тег может быть проверен на соответствие зашифрованному тексту и ключу (или, для менее безопасной схемы, обычному тексту и ключу). Существуют также аутентифицированные режимы шифрования, такие как GCM, которые в основном представляют собой шифры со встроенной аутентификацией MAC.

Почему зашифрованный текст длиннее оригинала?

Если вы добавите значения со значением 255 или ниже, вы получите значения 510 или ниже. Эти значения, однако, занимают минимум два байта для кодирования.

Если бы я хотел зашифровать другие вещи, а не текст ASCII, насколько это было бы сложно?

Не так сложно: просто выполните XOR или модульное сложение (например, по модулю 256 для 8 бит / один байт) с действительно случайным ключом. Однако, чтобы создать что-нибудь безопасное, вы должны использовать одноразовую клавиатуру (где размер ключа равен двоичному тексту) или современный шифр.

...