DECRYPTBYKEY (Transact-SQL)
Расшифровывает данные с помощью симметричного ключа.
Синтаксис
DecryptByKey ( { 'ciphertext' | @ciphertext }
[ , add_authenticator, { authenticator | @authenticator } ] )
Аргументы
ciphertext
Данные, зашифрованные с помощью ключа. Аргумент ciphertext имеет тип varbinary.@ciphertext
Переменная типа varbinary. Содержит данные, которые были зашифрованы с помощью ключа.add_authenticator
Указывает, было ли средство проверки подлинности зашифровано вместе с неформатированным текстом. Должно быть равно значению, переданному функции EncryptByKey при шифровании данных. Аргумент add_authenticator имеет тип данных int.authenticator
Данные, для которых формируется средство проверки подлинности. Должны соответствовать значению, переданному функции EncryptByKey. Аргумент authenticator имеет тип sysname.@authenticator
Переменная, содержащая сведения, из которых формируются данные для проверки подлинности. Значение аргумента должно совпадать со значением, заданным функции EncryptByKey.
Типы возвращаемых данных
varbinary с максимальным размером 8 000 байт.
Замечания
В функции DecryptByKey используется симметричный ключ. Этот симметричный ключ должен быть открыт уже в базе данных. Одновременно могут быть открыты несколько ключей. Открывать ключ непосредственно перед раскодированием необязательно.
Симметричное кодирование и декодирование осуществляется относительно быстро и подходит для работы с большими объемами данных.
Разрешения
Необходимо, чтобы симметричный ключ был открыт в текущем сеансе. Дополнительные сведения см. в разделе OPEN SYMMETRIC KEY (Transact-SQL).
Примеры
A. Декодирование с помощью симметричного ключа
Следующий пример иллюстрирует декодирование зашифрованного текста с помощью симметричного ключа.
-- First, open the symmetric key with which to decrypt the data.
OPEN SYMMETRIC KEY SSN_Key_01
DECRYPTION BY CERTIFICATE HumanResources037;
GO
-- Now list the original ID, the encrypted ID, and the
-- decrypted ciphertext. If the decryption worked, the original
-- and the decrypted ID will match.
SELECT NationalIDNumber, EncryptedNationalID
AS 'Encrypted ID Number',
CONVERT(nvarchar, DecryptByKey(EncryptedNationalID))
AS 'Decrypted ID Number'
FROM HumanResources.Employee;
GO
Б. Декодирование с помощью симметричного ключа и цифровой подписи
Следующий пример иллюстрирует расшифровку данных, зашифрованных с помощью средства проверки подлинности.
-- First, open the symmetric key with which to decrypt the data
OPEN SYMMETRIC KEY CreditCards_Key11
DECRYPTION BY CERTIFICATE Sales09;
GO
-- Now list the original card number, the encrypted card number,
-- and the decrypted ciphertext. If the decryption worked,
-- the original number will match the decrypted number.
SELECT CardNumber, CardNumber_Encrypted
AS 'Encrypted card number', CONVERT(nvarchar,
DecryptByKey(CardNumber_Encrypted, 1 ,
HashBytes('SHA1', CONVERT(varbinary, CreditCardID))))
AS 'Decrypted card number' FROM Sales.CreditCard;
GO