SQL Server中的EncryptByPassPhrase和C#中的Triple DES descrypt
本文关键字:中的 Triple DES descrypt Server EncryptByPassPhrase SQL | 更新日期: 2023-09-27 18:15:19
上下文:
- 数据存储在SQL Server中。某些字段使用EncryptWithPassPhrase加密
update my_table set my_field = EncryptByPassPhrase('012345678901234567890123','some value')
-
使用NHibernate获取数据。使用Interceptor 对加密数据进行解码
public static string Decrypt(byte[] toDecryptArray, string key) { byte[] keyArray; keyArray = UTF8Encoding.UTF8.GetBytes(key); TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); tdes.Key = keyArray; tdes.Mode = CipherMode.ECB; tdes.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = tdes.CreateDecryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toDecryptArray, 0, toDecryptArray.Length); return UTF8Encoding.UTF8.GetString(resultArray); }
它在cTransform.TransformFinalBlock
上失败,表示"要解密的数据长度无效"。
我的代码出了什么问题?使用相同的密钥(012345678901234567980123
(对数据进行加密/解密。
我没有发现如何通过C#代码解密用T-SQL函数加密的内容EncryptByPassPhrase。
但是SQLServer2005允许您创建C#程序集并将其加载到SQLServer中,然后构建存储过程或函数或C#方法。因此,我用应用程序和SQL Server之间的共享代码创建了"我的">EncryptByPassPhrase函数,这样我就可以在两个方面进行加密/解密。
文档中提到了密码短语:
类型为nvarchar、char、varchar、binary、varbinary或nchar的变量,包含一个密码短语,从中生成对称密钥。
http://msdn.microsoft.com/en-us/library/ms190357.aspx
因此,您不能在C#中解密它的原因是您需要使用派生密钥,而不是密码短语本身。不过,我不知道你是怎么得到钥匙的。