Зашифруйте печатный текст, чтобы результат можно было печатать (можно набирать)
Я хочу зашифровать некоторую информацию для системы лицензирования и хочу, чтобы результат мог быть напечатан пользователем.
Обновление: эта операция должна быть обратимой (дешифруемой), например, Encrypt ( ComputerID+ProductID) -> (любой стандартный символ ASCII, который может быть напечатан. В идеале, может быть, даже просто AZ).
До сих пор я конвертировал зашифрованный текст в HEX (так что это любой символ от 0 до F), но это удваивает количество символов.
Я использую VB6.
Я думаю, что я сделал бы некоторую операцию с каждой парой (Input$(x) и Key$(x)), а затем сделал бы MOD, чтобы держать его в диапазоне значений ascii (возможно, 0-9-AZ)
Есть предложения хорошего алгоритма?
3 ответа
Посмотрите в Base64 "шифрование".
Base 64 преобразует число в 64 различных символа ASCII, а в шестнадцатеричных стихах - только 16 различных символов ASCII... Делая Base64 более компактным и то, что вы ищете.
РЕДАКТИРОВАТЬ: код для этого в VB6 доступен здесь: http://www.nonhostile.com/howto-encode-decode-base64-vb6.asp
Согласно Fuzzy Lollipop, ниже, Base32 выглядит как еще лучший вариант. Бонусные баллы, если вы можете найти пример этого.
РЕДАКТИРОВАТЬ: Я нашел пример Base32 для VB6, хотя я еще не пробовал. -Clay
Вы хотите, чтобы это было обратимо - восстановить идентификаторы из зашифрованного текста? Если это так, то имеет значение, как вы комбинируете строку ключа и ввода.
Обычно вы XOR каждой байтовой пары (работайте с байтовыми массивами, чтобы избежать проблем с Unicode), циркулируя по ключевой строке, если она короче, чем ввод. Затем можно использовать кодировку Base N (32, 64 и т. Д.) Для генерации строки лицензии.
Обе операции являются обратимыми: вы можете восстановить строки XORed из строки Base N, затем снова XOR с ключом, чтобы получить исходные идентификаторы.
Если вас не волнует изменение операций, подойдет любая свертка ключа и идентификатора. XOR просто самый простой.