У меня есть ключ и настройка сертификата ok в базе данных, и я могу шифровать ok при вводе запросов напрямую с помощью HeidiSQL. Но проблема, с которой я столкнулась, заключается в том, чтобы заставить это работать с использованием классического asp. Я установил простую таблицу для тестирования, которая содержит столбец автоинкремента и столбец var binary max для хранения зашифрованных данных.Невозможно получить классические ASP-параметры запросов, работающих при использовании шифрования с симметричным ключом
Вот мой код:
chtest.commandtext="OPEN SYMMETRIC KEY SymmetricKey DECRYPTION BY CERTIFICATE [Certificate];"
set rschtest = chtest.execute
chtest.commandtext="INSERT into thetable(thevalue) values(?)"
chtest.Parameters.Append chtest.CreateParameter ("@thevalue", adVarBinary, adParamInput,8000, "EncryptByKey(Key_GUID('SymmetricKey'), 'some text here')" )
set rschtest = chtest.execute
Это похоже на работу, как двоичные данные получает введены в таблицу, но при расшифровке его непосредственно на сервере, то он просто показывает «Null».
Выполнение этих запросов непосредственно на сервере работает, например:
OPEN SYMMETRIC KEY SymmetricKey DECRYPTION BY CERTIFICATE Certificate
INSERT INTO thetable (thevalue) VALUES (EncryptByKey(Key_GUID('SymmetricKey'), 'some text here'))
, а затем ...
OPEN SYMMETRIC KEY SymmetricKey DECRYPTION BY CERTIFICATE [Certificate]
SELECT CONVERT(varchar, DecryptByKey(thevalue)) AS thevalue FROM thetable
работ и показывает правильное расшифрованный значение.
Я думаю, что проблема при использовании классического метода asp связана с необходимостью вставлять зашифрованную строку в varbinary как varchar? Или что-то вроде этого.
Кроме того, если я не использую параметризованные запросы, все работает нормально, но, очевидно, я хочу использовать подготовленные запросы для обеспечения безопасности.
Обратите внимание, что это устаревшее приложение, поэтому я должен использовать классический asp.
Любая помощь приветствуется.
Ошибка 'CreateParameter()' совершенно неверна, если вы хотите параметризовать значение, которое необходимо применить, к передаваемому базовому значению, чтобы тип данных был 'thevalue' до' EncryptByKey (Key_GUID ('SymmetricKey') , ...) '?, смотрит на меня как' varchar' строку '' некоторый текст здесь''. – Lankymart