Как создать нашу собственную систему счисления?
-
05-07-2019 - |
Вопрос
Вопрос касается любого современного неуправляемого языка.C-подобные языки, delphi, что угодно.
Я бы хотел создать свой собственный криптографический алгоритм, который, в отличие от других, уменьшает длину зашифрованной строки.
Моей первой мыслью было создать свою собственную систему счисления, похожую на шестнадцатеричную, но с большим количеством символов.Например [0..9] + [A..Z]. Это превратило бы число до 40 в однозначное значение.Я мог бы также добавить другие цифры, такие как '!,./?)(#!' и так далее.
Мой вопрос заключается в том, как реализовать такую числовую систему от A до Z, включая 0 до 9.Do Я должен объявлять каждое отдельное значение как постоянное вплоть до 0xZZZZZZZZ?это сделало бы мою жизнь ужасной
Пожалуйста, дайте мне ваши предложения, примеры.:)
Решение
Давайте подумаем об этом.
Каждый базовый символ 40 занимает 8 бит.Он кодирует число от 0 до 39, что всего на волосок больше, чем на 5 бит фактической информации.
Один байт может представлять 256 различных значений.Базовая кодировка 40 представляет только 40 различных значений в одном и том же байте.
Это, кажется, сеть потеря из 2-3 бит на закодированный байт.
Сказав это, базовое значение 40 - ЭТО строка и ничего больше.Никакого сложного объявления базы данных не требуется - это просто строка.
Вы пишете две функции - toBase40( someBytes ) и toBytes ( someBase40string ) для преобразования ваших строк base40 в обычные строки.
Если вам нужно хорошо проработанное существующее решение, исследуйте base64.
Другие советы
Вам нужно было бы изменить способ работы компьютеров и систем хранения данных.
Свободной памяти нет, и нет никакого способа получить свободное место бесплатно.Изменение системы счисления дало бы вам больше места, когда вы записываете его на бумаге, но в памяти компьютера вам все равно понадобится то же количество битов.
Также обратите внимание, что, если вы хотите что-то зашифровать, эта операция также предотвращает любое значимое сжатие, поскольку зашифрованное содержимое должно быть как можно ближе к случайному.
Обычно перед шифрованием выполняется некоторое сжатие формы (GZip или что-то подобное), но это не работает при смене систем счисления.
P.S.Используйте какой-нибудь проверенный алгоритм шифрования.
Обычно способ, которым алгоритмы шифрования уменьшают размер зашифрованного текста, заключается в том, чтобы сначала прогнать текст через алгоритм сжатия общего назначения, а затем зашифровать сжатый результат.Таким образом, вы почти всегда получите лучший результат, чем пытаясь объединить два алгоритма в один.
Люди, разработавшие алгоритмы шифрования, потратили, вероятно, миллионы человеко-часов, годы в аспирантуре и аспирантуре, чтобы получить свой опыт.Что заставляет вас думать, что вы можете придумать что-то лучше?
Вероятно, вы придумаете небезопасный алгоритм.
Используйте существующий алгоритм и используйте сжатие.
Я бы рекомендовал просто сжать входные данные (используя gzip, zlib или что-то еще) перед их шифрованием.Это проще и безопаснее, чем создавать свой собственный алгоритм.(Например, GnuPG делает это.)
Строки Base64 распространены во многих компьютерных языках и являются довольно стандартными.В нем используются следующие символы:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
Видишь http://en.wikipedia.org/wiki/Base64 для получения дополнительной информации