【问题标题】:How to get decrypted data from a database?如何从数据库中获取解密数据?
【发布时间】:2017-04-01 13:32:57
【问题描述】:

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

SELECT KEY_GUID('KeyName')

我的问题是如何使用此密钥处理我的 asp 应用程序中的解密部分。我曾尝试使用this,但它不起作用。

【问题讨论】:

  • 是敏感数据密码吗?因为如果是这样,你就走错了路。此外,加密算法对二进制数据而非字符串进行操作。
  • 不是密码。另外,我不能将字符串转换为二进制并从那里继续吗?
  • 您发布的链接是针对 .Net 加密而不是针对 SQL 加密的 SQL 加密,您必须打开对称密钥并使用正确的加密和解密功能。这些函数在二进制中工作,但您可以从其他数据类型来回转换。我看看能不能挖出一个例子

标签: c# sql asp.net encryption


【解决方案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

如您所述,当您使用 DB 加密技术时,需要在 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

【讨论】:

  • 谢谢,我会尽量用这种方式实现。
猜你喜欢
  • 1970-01-01
  • 2016-10-01
  • 2017-01-12
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多