T-SQL DecryptByKey возвращает NULL со значением столбца, но не с именем столбца - PullRequest
2 голосов
/ 01 октября 2019

У меня есть зашифрованное поле varbinary (MAX) в моей БД, которое называется ACCT_FName_encrypt.

Я могу успешно расшифровать это поле с помощью:

CONVERT(nvarchar(MAX), DecryptByKey(ACCT_FName_encrypt)) AS 'ACCT_FName_Denc'

Но если я попытаюсь расшифровать фактическое значение из столбца, я получу NULL:

CONVERT(nvarchar(MAX), DecryptByKey('0x001D25D87D3D8E49A97863ADC4958E790100000021E26DD2305384AE49EC9329EF2AF8758134F7C946EC9FE024805B8DF21472C4545D461DA9F2B7F96094C2AED09BF4A9')) AS 'ACCT_FName_Denc'

Какможно получить расшифрованное значение из прямой переменной varbinary без вызова поля?

Ответы [ 2 ]

2 голосов
/ 02 октября 2019

Он не должен передаваться как строка и после этого должен быть приведен к исходному типу. Полный рабочий пример:

OPEN SYMMETRIC KEY StackOverflow
DECRYPTION BY PASSWORD = 'pass123_@pass123_@'
GO

DECLARE @ColumnValue NVARCHAR(MAX);
DECLARE @EncrpytionValue VARBINARY(8000);

SET @ColumnValue = REPLICATE (N'A', 12)

SET @EncrpytionValue = ENCRYPTBYKEY( KEY_GUID('StackOverflow'), @ColumnValue )

SELECT @EncrpytionValue

SELECT CONVERT(NVARCHAR(MAX), DECRYPTBYKEY(@EncrpytionValue));
SELECT CONVERT(NVARCHAR(MAX), DECRYPTBYKEY(0x00B08017838E6C48889DD12542E4C52002000000A8C910DA1CBFFE30E446358940177F03F912EE36FACF91FA2044BE5C75C9AA69BC15E6425DE52C2A193BA13AEDA90AE2276C244E56692B75CB2D4FDEC8D596F9));

--DROP SYMMETRIC KEY StackOverflow;

и в вашем коде это будет просто:

CONVERT(nvarchar(MAX), DecryptByKey(0x001D25D87D3D8E49A97863ADC4958E790100000021E26DD2305384AE49EC9329EF2AF8758134F7C946EC9FE024805B8DF21472C4545D461DA9F2B7F96094C2AED09BF4A9)) AS 'ACCT_FName_Denc'
0 голосов
/ 01 октября 2019

Попробуйте преобразовать значение в Varbinary

select convert(varbinary, '0x001D25D87D3D8E49A97863ADC4958E790100000021E26DD2305384AE49EC9329EF2AF8758134F7C946EC9FE024805B8DF21472C4545D461DA9F2B7F96094C2AED09BF4A9')
...