【发布时间】:2017-03-25 22:28:44
【问题描述】:
我有以下问题:
我使用对称密钥加密了我的 SQL 数据库中的一列。现在我在数据库中有加密值,当我打开密钥并执行查询时:
SELECT Convert(varchar, DECRYPTBYKEY(ColumnName)) as ClientSecret
FROM dbo.Sample
在 Management Studio 查询编辑器中没问题,它会返回解密后的值。
但是当我尝试从我的 ASP.NET 应用程序中执行与 SqlCommand 相同的操作时,它返回 null。
代码:
string query = "SELECT Convert(varchar, DECRYPTBYKEY(ColumnName)) as ClientSecret FROM dbo.Sample";
var con = ConfigurationManager.ConnectionStrings["connectionName"].ConnectionString;
using (SqlConnection connection = new SqlConnection(con))
{
SqlCommand command = new SqlCommand(query, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
try
{
while (reader.Read())
{
//the value of client secret here is null
var readerTest = reader["ClientSecret"];
}
}
finally
{
// Always call Close when done reading.
reader.Close();
}
}
我的问题如下:
首先,为什么这不起作用?
其次,有没有更好的方法通过使用其加密算法来解密应用程序中列的值(而不是通过要求服务器来解密)?
【问题讨论】:
-
我认为当您从应用程序运行它时,您需要将密钥作为命令的一部分打开。你试过吗?
-
是的。我试过了。
标签: asp.net sql-server encryption