Добрый день.
Мне нужно научить Windows CryptoAPI шифровать сообщение приватной (не публичной) частью ключа, а расшифровывать при помощи публичной. Это необходимо для предоставления пользователям информации, которую они могут прочитать, но не могут изменить.
Как это работает сейчас:
я понимаю контекст
CryptAcquireContext(@Prov, PAnsiChar(containerName), nil, PROV_RSA_FULL, 0)
сгенерировать пару ключей
CryptGenKey(Prov, CALG_RSA_KEYX, CRYPT_EXPORTABLE, @key)
Зашифровать (и тут проблема. "ключ" - ключевая пара, и функция использует ее публичную часть);
CryptEncrypt(key, 0, true, 0, @res[1], @strLen, buffSize)
Расшифровать (здесь та же проблема, используется закрытая часть ключа)
CryptDecrypt(key, 0, true, 0, @res[1], @buffSize)
Спасибо за внимание/помощь.
Обновить
Да, я мог бы использовать цифровую подпись и другие методы...
Проблема в том, что мне нужно зашифровать одно поле базы данных и сделать так, чтобы никто, кроме меня, не смог его изменить. Прочитать это поле можно будет только с помощью моей программы (пока ее кто-нибудь не декомпилирует и не получит публичный ключ). Это можно сделать с помощью симметричного ключа и цифровых подписей, но тогда мне нужно будет создать другое поле и сохранить другой ключ и так далее...
Я очень надеюсь, что мы сможем как-то научить WIN API делать то, что я хочу. Я знаю, что могу сделать это с помощью RSA, и я надеюсь, что WinAPI каким-то образом поддерживает эту функцию.