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

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

# 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]