Как представить 32 байта двоичных данных наименьшим возможным способом печати - PullRequest
3 голосов
/ 22 мая 2011

У меня есть хэш sha256 некоторых данных, который является идентификатором продукта для системы регистрации.Я хочу передать эту информацию конечному пользователю и хочу, чтобы она содержала только печатные символы (предпочтительно, az, AZ и 0-9).Я пробовал обычный hex и base64, но оба они дают очень длинные результаты, которые не являются удовлетворительными.Я хочу представить данные в как можно меньшем формате буквенно-цифровыми символами, но без потери целостности.Обратите внимание, что данные не нужно конвертировать обратно, поэтому это может быть односторонний процесс, если безопасность не потеряна.

Я работаю в C.

Заранее спасибоза любую помощь в этом!

С уважением,

Филип Беннфол

Ответы [ 2 ]

3 голосов
/ 22 мая 2011

32 байта данных будет очень сложно осмысленно предоставить пользователю на носителе, который не поддерживает вырезание / вставку, как бы вы его ни представляли.

Уменьшите объем данных, которые вы используете для идентификатора продукта, и вы можете использовать Base-64 и друзей.

2 голосов
/ 22 мая 2011

Если Base64 не подходит для ваших 32 байтов, MD5 его до 16 байтов - shazam, теперь он вдвое длиннее.

Почему, да, абсурдно хешировать 32 байта до16 байтов, но это в основном то, что вы просите сделать, будь то 16 или любое другое количество байтов.Вы потеряете информацию.

Или просто начните с MD5, поскольку это меньший хэш.

Если пользователь не собирается вводить этот номер, насколько важно представление в любом случае?Все эти длинные хэш-свалки непостижимы.Когда я их вижу, я все равно смотрю на последние 3 символа.

...