Я ищу подход для шифрования / обфускации 30-битного числа.
Результаты будут сгруппированы в наборы по 3 и видимы для пользователей в виде 6-значного алфавитно-цифрового кода, закодированного в алфавите base32, но пользователь не должен иметь возможность выбрать шаблон в буквенно-цифровых строках.Например, пользователи могут видеть 3 строки: ASDFGH, LKJHGF, ZXCVBN, и они могут отображаться на номера 1073741821, 1073741822, 1073741823. Но это шаблон, который они не могут легко понять.
Я рассмотрел несколько алгоритмов шифрования, например, DES.Вот плохая и наивная попытка:
import struct
from Crypto.Cipher import DES
from .baseconv import base32_urlsafe
_KEY = '\x81\x98\xe1\x14<\xb3\xe8\x10'
_encryptor = DES.new(_KEY)
def encrypt_number(number):
encrypted_i64 = struct.unpack(
'!Q', _encryptor.encrypt(struct.pack('!Q', number))
)[0]
encrypted_i30 = encrypted_i64 >> 34
return base32_urlsafe.encode(encrypted_i30)
Но, очевидно, я не смогу расшифровать строку, если она когда-либо понадобится, и уникальность при таком подходе теряется.Также рассматривал использование XOR, но это слишком предсказуемо, поскольку чаще цифры не будут иметь последовательную последовательность.
Мне никогда не приходилось кодировать что-то подобное.Итак, я ищу некоторые алгоритмы шифрования / подходы для исследования и рассмотрения.Я использую python, но приветствуются идеи или примеры, использующие другие языки.