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(对数据进行加密/解密。

SQL Server中的EncryptByPassPhrase和C#中的Triple DES descrypt

我没有发现如何通过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#中解密它的原因是您需要使用派生密钥,而不是密码短语本身。不过,我不知道你是怎么得到钥匙的。