Заказчик поставил задачу - чтобы моя программа на VB6 работала только с его оборудованием. Оборудование определяется по серийному номеру.
Решил использовать RSA - у заказчика есть закрытый ключ, у клиента - открытый.
Заказчик шифрует проданные клиенту серийники через RSA закрытым ключем, получается файл лицензий.
Клиент загружает файл лицензий, соответственно программа может открытым ключом расшифровать его и получить список серийников, с которыми она может работать.
Все бы хорошо, но все алгоритмы работы с RSA на Бейсике чрезмерно усложнены. То, что я делаю на OpenSSL играючи - одной командной строкой, тут приходится описывать ужасающе сложно. Вот как я это делаю на OpenSSL:
..\openssl\bin\openssl dgst -sign private.pem -out signature -md5 file.txt -c
..\openssl\bin\openssl dgst -signature signature -verify public.pem file.txt
Мысль вызывать OpenSSL через командную строку отверг как очевидное извращение. Я уже было почти дошел до обертки на VB над виндовой библиотекой CryptAPI, но тут нашел реализацию RSA http://www.di-mgt.com.au/crypto.html#dhvb.
Правда, автор предупреждает, что работает медленно, но у меня размер шифруемого текста небольшой - равный длине серийника (серийник цифровой), думаю взлетит.
Также автор предупреждает, что его программа не генерирует ключи.
Но я их генерирую сам:
del private.pem
del public.pem
..\openssl\bin\openssl genrsa -out private.pem 2048
..\openssl\bin\openssl rsa -in private.pem -out public.pem -pubout
Остался только один момент - как извлечь числа модуля и экспоненты из PEM-файла открытого и закрытого ключа? Перелопатил весь интернет, не нашел.
Но хорошо на sql подсказали ссылку: http://www.sql.ru/forum/1084939/pem-kluch-rsa-gde-v-nem-hranyatsya-n-e-d
Попробовал - получилось:
rem http://www.openssl.org/docs/apps/rsa.html
..\openssl\bin\openssl rsa -pubin -inform PEM -text -noout -in public.pem -out public.info
..\openssl\bin\openssl rsa -inform PEM -text -noout -in private.pem -out private.info
Теперь будем надеяться что алгоритм от di-mgt работает.
А то я уже задачи фрилансерам кинул за 1500 рублей на реализацию подписи RSA. Посмотрим, может и сам справлюсь, гыгыгыгы...
Journal information