在sql server上解密数据

时间:2013-11-15 14:41:02

标签: c# sql sql-server-2008 encryption

我正在处理数百万行必须加密并插入sql server的数据。由于有很多数据可以使用,我使用SqlBulkCopy来推送数据。对于SqlBulkCopy,我使用数据表来保存数据,在将数据添加到数据表之前,我使用的是加密数据。 AESCryptoServiceProvider,一旦批量复制完成,加密数据就会进入sql server。现在,一旦加密数据在服务器中,有没有办法解密sql server上的数据。我知道使用c#解密很容易,但我有一个用例,人们想在sql server中解密数据并执行一些操作。

以下是代码,请指出正确的方向。

AES 
    private const string AesIV = @"!QAZ2WSX#EDC4RFV";
    private const string AesKey = @"5TGB&YHN7UJM(IK<";


AES Encryption

        public string Encrypt(string text)
        {
            // AesCryptoServiceProvider
            AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
            aes.BlockSize = 128;
            aes.KeySize = 128;
            aes.IV = Encoding.UTF8.GetBytes(AesIV);
            aes.Key = Encoding.UTF8.GetBytes(AesKey);
            aes.Mode = CipherMode.CBC;
            aes.Padding = PaddingMode.PKCS7;

            // Convert string to byte array
            byte[] src = Encoding.Unicode.GetBytes(text);

            // encryption
            using (ICryptoTransform encrypt = aes.CreateEncryptor())
            {
                byte[] dest = encrypt.TransformFinalBlock(src, 0, src.Length);

                // Convert byte array to Base64 strings
                return Convert.ToBase64String(dest);
            }
        }
BCP

       public void bcp(Program p){
            using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlCon"].ToString()))
            {

                SqlBulkCopy bc = new SqlBulkCopy(con.ConnectionString, SqlBulkCopyOptions.TableLock);
                bc.DestinationTableName = "tbl";

                bc.ColumnMappings.Add("id", "id");
                bc.ColumnMappings.Add("info", "info");
                bc.ColumnMappings.Add("desc", "desc");

                bc.BulkCopyTimeout = 300;
                bc.BatchSize = 3000000;
                con.Open();
                bc.WriteToServer(p.dt);
                bc.Close();
                con.Close();
            }
        }

Data parsing and encryption
        public void dp(Program p) {
            using (var reader = new StreamReader(@"C:\data.txt"))
            {

                string h = reader.ReadLine();
                DataRow row;
                int i = 0;
                while (i< 3000000)
                {
                    //insert into database
                    string[] data = reader.ReadLine().Split(',');

                    row = p.dt.NewRow();
                    row["id"] = Convert.ToInt32(data[0]);
                    row["info"] = data[1].ToString();
                    row["desc"] = p.Encrypt(data[2].ToString());

                    Console.WriteLine(row["id"]);
                    p.dt.Rows.Add(row);
                    i++;
                }
            }

        }

现在我已经加密了数据,我试图看看我是否可以解密SQL Server上的数据,我试图看看我是否使用AES_128来解密它。

另一种选择是加密列并且插入必须逐行,这将是开发和维护的头痛。

1 个答案:

答案 0 :(得分:1)