如何从C#加密和解密SQL Server 2008 r2中的数据?

时间:2013-12-17 18:09:15

标签: encryption sql-server-2008-r2 cryptography aes

您好我可以为指定的字符串执行加密和解密并保存到数据库中。但我想搜索Data.But无法搜索加密列的数据。有任何办法。在前面我使用AES,下面的方法用于加密。

  private string Encrypt(string Text)
    {
        string EncryptionKey = "abcdef@123";
        byte[] clearBytes = Encoding.Unicode.GetBytes(Text);
        using (Aes encryptor = Aes.Create())
        {
            Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
            encryptor.Key = pdb.GetBytes(32);
            encryptor.IV = pdb.GetBytes(16);
            using (MemoryStream ms = new MemoryStream())
            {
                using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(clearBytes, 0, clearBytes.Length);
                    cs.Close();
                }
                Text = Convert.ToBase64String(ms.ToArray());
            }
        }
        return Text;
    }

以下方法用于解密

     private string Decrypt(string Text)
    {
        string EncryptionKey = "abcdef@123";
        byte[] cipherBytes = Convert.FromBase64String(Text);
        using (Aes encryptor = Aes.Create())
        {
            Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
            encryptor.Key = pdb.GetBytes(32);
            encryptor.IV = pdb.GetBytes(16);
            using (MemoryStream ms = new MemoryStream())
            {
                using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(cipherBytes, 0, cipherBytes.Length);
                    cs.Close();
                }
                Text = Encoding.Unicode.GetString(ms.ToArray());
            }
        }
        return Text;
    }

任何人都可以根据这个来帮助我..,

2 个答案:

答案 0 :(得分:0)

我不相信有 - 这是加密方式的一部分。

如果字符串具有搜索到的某些特征,例如嵌入其中的名称,则可以计算名称的SOUNDEX值并将其存储在单独的列中。然后,您可以根据名称的soundex值进行搜索,这将减少返回的行数,然后对其进行解密并进行搜索。至少你不必拉下整张桌子。 当然,这样做可能是一个安全漏洞......

干杯 -

答案 1 :(得分:0)

我认为,您需要创建SQL CLR数据库项目并使用

创建一个函数

解密逻辑并在SQL Query中调用。您将能够搜索加密数据。