Вы можете использовать стандартные алгоритмы подписи RSA или DSA, чтобы делать то, что вы хотите. Для C # это стандартные алгоритмы, встроенные в среду выполнения. Для Delphi у вас есть выбор. См. Бесплатная библиотека шифрования для Delphi .
После того как вы выбрали библиотеку шифрования для Delphi, теперь вы можете делать следующее:
- Сервер C # подписывает адрес электронной почты пользователя и дату, используя выбранный алгоритм подписи, вашим личным ключом.
- Клиент Delphi проверяет лицензию, используя тот же алгоритм подписи.
- Как только клиент Delphi узнает, что подпись действительна, вы можете проверить адрес электронной почты / дату и решить, разрешить ли запуск вашей программы.
Я сделал именно ту проверку подписи, которую вы хотите / нуждаетесь, используя алгоритм DSA, LockBox и C #.
Следует помнить, что в шифровании C # используются числа с прямым порядком байтов, а в LockBox / Windows CryptoAPI используются числа с прямым порядком байтов. Это, вероятно, означает, что вам нужно обратить обратный порядок байтов как переменных открытого ключа, так и самой подписи, прежде чем отправлять ее клиенту Delphi для проверки. Проверьте документацию по своей крипто-библиотеке.
Последнее замечание: другие предложили использовать симметричные алгоритмы шифрования, такие как AES / 3DES / и т. Д. Проблема с этим подходом заключается в том, что ваш «секретный» ключ шифрования распределяется между сервером и клиентом. Возможно, что кто-то сможет восстановить ключ, перепроверив ваш скомпилированный EXE-файл, а затем создать «генератор ключей» - в худшем случае это будет поддельный сервер активации, который раздает «подлинные» зашифрованные лицензии. Используя ассиметричное шифрование и сохраняя секретный ключ, у вас не будет этой проблемы. Пользователям придется взламывать каждую новую версию вашего EXE-файла или передавать подписанные подлинные лицензии - гораздо более неудобно.