1

我在 C# 中使用这样的加密:

// Step 1. We hash the passphrase using MD5
// We use the MD5 hash generator as the result is a 128 bit byte array
// which is a valid length for the TripleDES encoder we use below  
var utf8 = new UTF8Encoding();
var hashProvider = new MD5CryptoServiceProvider();
var tdesKey = hashProvider.ComputeHash(utf8.GetBytes(passwordPhrase));

// Step 2. Create a new TripleDESCryptoServiceProvider object
var tdesAlgorithm = new TripleDESCryptoServiceProvider
                        {
                            Key = tdesKey,
                            Mode = CipherMode.ECB,
                            Padding = PaddingMode.PKCS7
                        };

// Step 3. Attempt to encrypt the string
var dataToEncrypt = utf8.GetBytes(message);
var encryptor = tdesAlgorithm.CreateEncryptor();

return Convert.ToBase64String(
    encryptor.TransformFinalBlock(
        dataToEncrypt, 0, dataToEncrypt.Length));

我想在 SQL Server 中使用相同的过程。所以我的意思是来自 C# 代码的加密消息和来自 SQL Server 的加密消息必须是相同的字符串。

例如,在 SQL Server 中683846也会变成fN8r09iDu4c=

我怎样才能做到这一点?

4

2 回答 2

1

只有通过 SQLCLR 在服务器中使用相同的 C# 代码,才能实现此目的。本机 SQL 加密函数不会创建与 C# 代码相同的输出(即使使用相同的密钥和初始化向量)。原生 SQL 加密只能通过 SQL 解密。

于 2013-07-18T12:45:26.883 回答
0

您可以ENCRYPTBYPASSPHRASE用于三重 DES 加密并HASHBYTES从密码短语派生密钥材料。

您必须将密码短语存储在 SQL Server 的某个地方,我不确定最好的方法是什么。或者,您可以接受密码作为从用户传入的参数。

于 2013-07-18T12:32:56.150 回答