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