如何从数据库获取解密数据

本文关键字:解密 数据 获取 数据库 | 更新日期: 2023-09-27 18:18:24

我想使用加密来保护数据库中的敏感数据。我已经通过使用AES_256算法的对称密钥和证书加密了SQL数据库中的数据。现在的问题是,我不知道如何处理加密/解密部分在我的ASP。我可以从用户接收一个字符串,我应该能够解密字符串,并检查它是否等于数据库中的一些加密值。我通过

得到键

SELECT KEY_GUID('KeyName')

我的问题是如何通过使用这个密钥来处理我的asp应用程序中的解密部分。

如何从数据库获取解密数据

DECLARE @KeyName SYSNAME = 'keyName'
IF NOT EXISTS (SELECT * FROM sys.openkeys WHERE key_name = @KeyName)
BEGIN
    OPEN SYMMETRIC KEY keyName DECRYPTION BY CERTIFICATE certificateName;
END
DECLARE @WhatToEncrypt VARCHAR(400) = 'Something To Encrypt can be binary or character'
DECLARE @EncryptedBinary VARBINARY(MAX)
SET @EncryptedBinary = ENCRYPTBYKEY(KEY_GUID(@KeyName),@WhatToEncrypt)
DECLARE @DecryptedBinary VARBINARY(MAX)
SET @DecryptedBinary = DECRYPTBYKEY(@EncryptedBinary)
SELECT @WhatToEncrypt as Original, CAST(@DecryptedBinary AS VARCHAR(400)) as EncryptedThenDecrypted
--may want to add some logic to see if it was open and leave it open
CLOSE SYMMETRIC KEY keyName

加密和解密需要在SQL端而不是ASP端完成。. Net端,当您使用您所描述的数据库加密技术。因此,要在c#中实现,你基本上必须传递适用的SQL语句,就像你执行存储过程或其他东西一样。

我建议使用存储过程来打开和关闭键,然后在需要比较值等时简单地使用ENCRYPTBYKEYDECRYPTBYKEY函数。

还要注意,这两个加密函数也可以像盐一样传递验证数据。

ENCRYPTBYKEY - https://msdn.microsoft.com/en-us/library/ms174361.aspx

DECRYPTBYKEY - https://msdn.microsoft.com/en-us/library/ms181860.aspx