我想使用加密来保护数据库中的敏感数据。我已经使用Symmetric Key和Certificate with AES_256算法加密了SQL数据库中的数据。现在问题是我不知道如何在我的ASP.NET应用程序中处理加密/解密部分。我可以从用户收到一个字符串,我应该能够解密字符串并检查它是否等于数据库中的某个加密值。
我得到了钥匙 SELECT KEY_GUID('KeyName')
我的问题是如何使用此密钥在我的asp应用程序中处理解密部分。我曾尝试使用this,但它不起作用。
答案 0 :(得分:1)
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端NOT ASP.Net端完成加密和解密。因此,要在C#中实现,您必须基本上传递适用的SQL语句,就像执行存储过程一样。
我建议您使用存储过程来打开和关闭密钥,然后只需使用函数ENCRYPTBYKEY
和DECRYPTBYKEY
,因为您需要比较值等。
另请注意,两个加密函数也可以像盐一样传递验证数据。
ENCRYPTBYKEY
- https://msdn.microsoft.com/en-us/library/ms174361.aspx
DECRYPTBYKEY
- https://msdn.microsoft.com/en-us/library/ms181860.aspx