Как создать нашу собственную систему счисления?

StackOverflow https://stackoverflow.com/questions/1205868

Вопрос

Вопрос касается любого современного неуправляемого языка.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 для получения дополнительной информации

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top