加密列我试图使用SQL查询从数据库中有指定的电子邮件来获取用户名:比较查询
SELECT [USERNAME] FROM REGTAB WHERE DECRYPTBYASYMKEY(ASYMKEY_ID('ENKEY'),[EMAIL])[email protected]
但它显示NULL
输出。在比较之前是否需要加密输入@email
?它会始终为特定输入产生相同的加密值吗?
我正在使用RSA 2048算法。
加密列我试图使用SQL查询从数据库中有指定的电子邮件来获取用户名:比较查询
SELECT [USERNAME] FROM REGTAB WHERE DECRYPTBYASYMKEY(ASYMKEY_ID('ENKEY'),[EMAIL])[email protected]
但它显示NULL
输出。在比较之前是否需要加密输入@email
?它会始终为特定输入产生相同的加密值吗?
我正在使用RSA 2048算法。
这是一个黑暗的镜头,因为你没有提供你的钥匙ENKEY
的创建方式。
从我期望它已经用密码创建的行为,你没有提供DECRYPTBYASYMKEY的密码,可以调用没有第三个参数的密码。使用数据库主密钥的密钥。
/*
CREATE ASYMMETRIC KEY ENKEY
WITH ALGORITHM = RSA_2048
ENCRYPTION BY PASSWORD = 'Mydummypassword';
*/
/*
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password'
CREATE ASYMMETRIC KEY ENKEY2
WITH ALGORITHM = RSA_2048
*/
Declare @aValue Varchar(50)
Select @aValue='Test'
Select DECRYPTBYASYMKEY(ASYMKEY_ID('ENKEY'),
EncryptByAsymKey(AsymKey_ID('ENKEY'), @aValue)
) as [WithOutPassword]
,
DECRYPTBYASYMKEY(ASYMKEY_ID('ENKEY'),
EncryptByAsymKey(AsymKey_ID('ENKEY'), @aValue)
,N'Mydummypassword') as [WithPassword]
,Case when @aValue=DECRYPTBYASYMKEY(ASYMKEY_ID('ENKEY'),
EncryptByAsymKey(AsymKey_ID('ENKEY'), @aValue)
) then 1 else 0 end as [IdenticWithOutPassword]
,Case when @aValue=DECRYPTBYASYMKEY(ASYMKEY_ID('ENKEY'),
EncryptByAsymKey(AsymKey_ID('ENKEY'), @aValue)
,N'Mydummypassword') then 1 else 0 end as [IdenticWithPassword]
将提供结果:
NULL 0x54657374 0 1
Select DECRYPTBYASYMKEY(ASYMKEY_ID('ENKEY2'),
EncryptByAsymKey(AsymKey_ID('ENKEY2'), @aValue)
) as [With MASTER KEY ENCRYPTION]
,Case when @aValue=DECRYPTBYASYMKEY(ASYMKEY_ID('ENKEY2'),
EncryptByAsymKey(AsymKey_ID('ENKEY2'), @aValue)
) then 1 else 0 end as [Identic]
将提供结果:
0x54657374 1
与pa ssword,然后使用'CONVERT()'它工作正常。但我想隐藏这个密码。我不希望它在查询中可见。我该怎么做?请帮助我,因为我是SQL Server加密的新手。 – 2014-10-13 17:58:57
因为我不确定你需要什么,所以一个简单的可能用途可能是使用加密程序'Alter Procedure P_GetUserforEmail(@email varchar(50)) WITH ENCRYPTION as ....'提供电子邮件的用户名。 – bummi 2014-10-13 20:28:59
[DECRYPTBYASYMKEY()不返回预期值](HTTP:/ /stackoverflow.com/questions/8768144/decryptbyasymkey-not-returning-expected-value) – bummi 2014-10-12 12:56:39
@bummi使用'CONVERT()'后,它仍然返回NULL' – 2014-10-13 17:13:09