sql-server - T-SQL DecryptByKey 返回列值 NULL,但不返回列名

标签 sql-server t-sql encryption encryption-symmetric varbinary

我的数据库中有一个名为 ACCT_FName_encrypt 的加密 varbinary(MAX) 字段。

我可以通过以下方式成功解密该字段:

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

但是如果我尝试解密列中的实际值,我会得到 NULL:

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

如何在不调用字段的情况下从直接 varbinary 获取解密值?

最佳答案

它不应该作为字符串传递,并且需要在之后转换为原始类型。完整的工作示例:

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'

关于sql-server - T-SQL DecryptByKey 返回列值 NULL,但不返回列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58186565/

相关文章:

sql - 有没有一种方法可以使用月份编号而不是月份名称来搜索 SQL 查询?

SQL Server - 案例陈述

sql-server - sp_refreshview 附近的语法不正确

用于克隆数据库的 SQL 脚本,保持原始数据库不变

javascript - 对用户隐藏嵌入 map 的地理位置

java - tomcat JNDI 128位加密

sql-server - 古代 Microsoft DBMS 中的汉明距离

sql-server - 如何查找本周第一天的日期

sql-server - Alter 表中的 Case 语句错误

module - 文件 "<string>",第 6 行,在 <模块> 中 ImportError : No module named Crypto. 密码