Похоже, вы путаете шифрование и кодирование. Это совершенно отдельные заботы. Поскольку вы не предоставляете почти достаточно информации о необходимой безопасности, чтобы что-либо сказать о соответствующем шифровании, я предполагаю, что вы говорите о кодировании. Для кодирования на самом деле не имеет значения, зашифрован ввод или нет. Единственная разница в том, что зашифрованный ввод почти наверняка не может быть сжат, поэтому любое сжатие должно выполняться перед шифрованием.
Для кодирования самый простой подход — рассматривать ввод как большое число (вы), выбрать набор символов и закодировать число как основание-N, где N — размер выбранного набора. Поскольку результирующий код предназначен для ввода человеком, вам следует избегать использования нескольких символов с одинаковыми формами (1,l,I/o,O,0,D/5,S), выбор зависит от используемого шрифта. .
Также очень полезно иметь некоторое встроенное обнаружение ошибок. Простой способ создать хорошее обнаружение ошибок состоит в том, чтобы добавить к числу несколько битов хорошей хеш-функции. Например (в псевдокоде):
number_to_encode = input_number << 5 | MD5(input_number) & 0x1F
encoded_string = Base32Encode(number_to_encode)
number_to_decode = Base32Decode(encoded_string)
output_number = number_to_decode >> 5
checksum = number_to_decode & 0x1F
if MD5(output_number) & 0x1F != checksum then
Error
Вы можете добиться большего, если у вас есть модель ошибок, но при условии, что модель случайных ошибок настолько хороша, насколько это возможно, обнаруживая более 96% всех ошибок, добавляя только один символ base32.
person
Ants Aasma
schedule
25.05.2010