我正在尝试使用Dapper.NET,将一个varbinary
参数用于如下操作:
string secret = "secret";
// from SELECT ENCRYPTBYPASSPHRASE('secret', N'xx') >>;
string ciphertext = "0x01000000393FE233AE939CA815AB744DDC39667860B3B630C82F36F7";
using (var conn = new SqlConnection(...))
{
var result = conn.ExecuteScalar(@"SELECT CONVERT(NVARCHAR(4000), DECRYPTBYPASSPHRASE(@secret, @ciphertext)) as decrypted",
new
{
secret,
ciphertext = Encoding.Unicode.GetBytes(ciphertext)
});
}
然而结果为
null
。但是如果我直接运行 SQL,它会返回有效的结果。SELECT CONVERT(NVARCHAR(40), DECRYPTBYPASSPHRASE('secret', 0x01000000393FE233AE939CA815AB744DDC39667860B3B630C82F36F7))
返回加密文本xx
。
你有什么想法我做错了什么吗?
Encoding.Unicode.GetBytes
将会获取您的十六进制值的字符串表示的字节数组。 - Robciphertext
的正确值。 - Rob