Мой алгоритм шифрования «маской» на Python

от автора

Всем хаброчитатилям привет, для начала расскажу что из себя представляет алгоритм «маской» (название придумал я).

И да, как можно прочитать в названии нам нужно сгенерировать маску чтобы потом её на что-то наложить. Вот так легко она генерируется:

# code n1 from random import shuffle password = 'пароль' data = ['какие-небудь данные'] mask = list(range(len(data))) seed(password) shuffle(mask)

Мой код может быть не идеален

Теперь давайте определимся что мы в принципе и будем шифровать

Мой выбор пал на байты, так как в них легко превратить почти всё в Python

А теперь давайте напишем сам алгоритм наложения маски!

Алгоритм кодирования:

#code n2 result = [0] * len(data) for d in range(len(data)):   result[mask[d]] = data[d] print(result)

А вот и алгоритм расшифровки:

#code n3 for d in mask:   result.append(data[d]) print(result)

Да, всё так просто

НО! Теперь давайте представим что мы просто зашифровали b’hello’ и у нас получилось b’oelhl’, даже человек простым подбором может прочитать это.

Поэтому нужно во что-то превратить эти байты чтобы они после шифровки небыли читабельными

Я выбрал превращать байты в биты и эти биты уже и шифровать

Вот код превращения из байтов в биты:

#code n4 result = [] for b in _bytes:   result.extend(map(int, f'{b:08b}')) print(result)

А вот код обратного превращения:

#code n5 result = bytes(int(''.join(str(bit) for bit in bits), 2) for bits in [self.data[i:i + 8] for i in range(0, len(self.data), 8)]) print(result) # Извините, если всё написал в одной строке и это не читабельно

А вот теперь и можно использовать этот алгоритм на практике. Давайте что-нибудь зашифруем!

password = 'привет' data = b'hello' mask = createMask(password) # создаём маску (code n1) bits_data = toBits(data) # превращаем байты в биты (code n4) enc_data = encode(data, mask) # кодируем алгиритмом "маски" (code n2) bytes_enc_data = toBytes(enc_data) # расшифровывем биты в байты (code n5) print(bytes_enc_data)   b'\xdb6T,^'

Круто, да! Мы получили полностью не читабельный рузультат, зашифрованный паролем!

Ну и также этот результат можно расшифровать:

bits_enc_data = toBits(bytes_enc_data) # превращаем шифрованый результат обратно в биты (code n4) dec_bits = decode(bits_enc_data, mask) # расшифровывем биты (code n3) bytes_dec_data = toBytes(dec_bits) # превращаем биты в байты (code n5)  print(dec_result)   b'hello'

И да, я сделал модуль на python

Исходный код модуля можно найти на

[https://github.com/michazaxm/shifrator]

И проект на pypi:

[https://pypi/project/enc-shifrator]


ссылка на оригинал статьи https://habr.com/ru/post/718364/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *