2015-04-27 3 views
1

Я написал следующий код для дешифрования некоторых конфиденциальных данных, в большинстве случаев мне нужно запрашивать данные с использованием T-SQL, где я не могу расшифровать данные, которые зашифрованы по этому коду. поэтому мой вопрос заключается в том, как написать функцию в T-SQL, которая работает так же, как и в C#, я буду использовать это в хранимых процедурах.AES encrypt in C# decrypt в T-SQL

Заранее спасибо

Шифрование Функция:

public static string Encrypt(string text) 
    { 
     if (string.IsNullOrEmpty(EncryptionKey)) 
      return string.Empty; 
     if (string.IsNullOrEmpty(text)) 
      return string.Empty; 
     var clearBytes = Encoding.Unicode.GetBytes(text); 
     using (var encryptor = Aes.Create()) 
     { 
      var 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 (var ms = new MemoryStream()) 
      { 
       using (var cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write)) 
       { 
        cs.Write(clearBytes, 0, clearBytes.Length); 
       } 
       text = Convert.ToBase64String(ms.ToArray()); 
      } 
     } 
     return text; 
    } 

дешифрования Функция:

public static string Decrypt(string text) 
    { 
     if (string.IsNullOrEmpty(EncryptionKey)) 
      return string.Empty; 
     if (string.IsNullOrEmpty(text)) 
      return string.Empty; 
     var cipherBytes = Convert.FromBase64String(text); 
     using (var encryptor = Aes.Create()) 
     { 
      var 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 (var ms = new MemoryStream()) 
      { 
       using (var cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write)) 
       { 
        cs.Write(cipherBytes, 0, cipherBytes.Length); 
       } 
       text = Encoding.Unicode.GetString(ms.ToArray()); 
      } 
     } 
     return text; 
    } 
+3

Выведения капельницы из ключевого поражения цели CBC. – SLaks

ответ