denis-titusov
@denis-titusov
DevOps engineer

Как на Python реализовать обратимое XOR-шифрование на основе ограниченного алфавита?

Имеется ограниченный алфавит. Допустим, это буквы и цифры. То есть всего 62 символа. В таком случае для шифрования нам достаточно 6 бит.
Есть слово, которое нужно зашифровать и ключ.
# Составляем словарь
def form_dict():
    alphabet = list(ascii_letters) + list(digits)
    return dict([(i, alphabet[i]) for i in range(len(alphabet))])

# Разбираем слово и ключ
def encode_val(word):
    d = form_dict()
    return [k for c in word for k, v in d.items() if v == c]

# Шифруем слово:
def comparator(value, key):
    return dict([(index, list(character))
                 for index, character in enumerate(zip(value, cycle(key)))])

def full_encode(value, key):
    d = comparator(value, key)
    l = len(form_dict())
    return [(v[0] ^ v[1]) % l for v in d.values()]

def full_decode(value, key):
    d = comparator(value, key)
    l = len(form_dict())
    return [(v[0] - v[1]) % l for v in d.values()]

#шифруем
word = 'habrahabrru'
key = 'occaZZion9'
print 'Слово: ' + word
print 'Ключ: ' + key
key_encoded = encode_val(key)
value_encoded = encode_val(word)
encoded_text = full_encode(value_encoded, key_encoded)

#пытаемся расшифровать
decoded = full_decode(encoded_text, key_encoded)


При этом текст отлично шифруется и расшифруется.

Но, если расширить алфавит до 64 символов (добавить, например, точку, запятую и деффис), то на шифрование надо уже 7 бит, и текст начинает шифроваться неправильно, после чего не расшифровывается.

Как реализовать обратимое XOR-шифрование, чтобы зашифрованный текст обязательно состоял из ограниченного алфавита (допустим, 64 символа), а потом поддавался обратной дешифровке?
  • Вопрос задан
  • 11111 просмотров
Решения вопроса 1
tsarevfs
@tsarevfs
C++ developer
Написал вариант который должен работать для любого алфавита. Однако должны выполняться условия:
1)размер алфавита - степень двойки;
2)изначальное сообщение и ключ состоят из символов этого алфавита.

С другой стороны, если вам нужен ограниченный алфавит для отображения или хранения в базе то можно приводить к нему уже зашифрованный текст.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы