0
我们必须在SQL Server级别对用户ID进行加密,然后通过查询字符串将此加密值传递给C#,一旦C#读取它,它需要解密(调用SQL服务器功能来实现这一点)。数据库加密和数据库解密使用C#代码
我们的加密技术不一定非常强大,所以我们决定使用EncryptByPassPhrase
和DecryptByPassPhrase
。
但是,我无法将解密的值从C#传递到SQL Server函数,以便我找回解密的字符串。
SQL Server的功能:
调用解密函数CREATE FUNCTION [dbo].[ufn_DecryptString]
(@EncryptedString VARBINARY(200))
RETURNS VARCHAR(200)
AS
BEGIN
DECLARE @RetValue VARCHAR(200)
DECLARE @PassPhrase varchar(200) = 'key'
SET @RetValue = DecryptByPassPhrase(@PassPhrase, @EncryptedString)
RETURN @RetValue
END
C#代码:
object decryptedUserId = 0;
byte[] newByte = StrToByteArray(encryptedUserId);
var conn = new SqlConnection(CONN_STRING);
const string query = "select dbo.ufn_DecryptString(@EncryptedString);";
conn.Open();
var cmd = new SqlCommand(query, conn);
cmd.Parameters.Add("@EncryptedString", SqlDbType.VarBinary).Value = newByte;
decryptedUserId = cmd.ExecuteScalar();
conn.Close();
return decryptedUserId;
private static byte[] StrToByteArray(string strValue)
{
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
return encoding.GetBytes(strValue);
}
我不断收到一个空白对象decryptedUserId
当我执行的代码。
谢谢,这有助于解决一半的问题,但是,无论何时我通过转换为byte []将编码的字符串传递给SQL,似乎从上述代码看来,编码的字符串在SQL中对其进行配置时不会保持不变,任何想法为什么? – 2014-09-12 19:12:46
您是否试过指定参数的长度,即'cmd.Parameters.Add(“@ EncryptedString”,SqlDbType.VarBinary,200).Value = newByte' – 2014-09-12 19:57:01