Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak uzyskać zgodność między szyfrowaniem AES C# i SQL2k8?

Jest kilka rzeczy, którym chciałbym się przyjrzeć:

  1. Upewnij się, że tekst jawny jest identyczny pod względem zawartości i kodowania. IIRC, strumienie są domyślnie ustawione na UTF-8, natomiast jeśli Twój VarBinaryToBase64 funkcja przyjmuje parametr nvarchar, będzie to Unicode.

  2. Upewnij się, że oba algorytmy szyfrowania używają tego samego rozmiaru bloku. W SQL algorytm określasz, wywołując CREATE SYMMETRIC KEY . Jeśli nie określisz algorytmu, użyje on AES256. W .NET przy użyciu RijndaelManaged , uważam, że domyślny rozmiar bloku to 128, ale możesz ustawić go na 256 (nie możesz, jeśli używasz Aes klasa).

  3. Ostatnią rzeczą, której bym szukał, jest to, jak SQL Server radzi sobie z wektorami inicjalizacji, jak wspomniałeś w poprawionym poście. Chcę powiedzieć, że używa authenticator tego parametru, ale to szalone zgadywanie.

EDYTUJ

Byłem daleko. Biorąc pod uwagę to, co odkryłem, nie można użyć klasy .NET do odszyfrowania tekstu zaszyfrowanego za pomocą wbudowanego szyfrowania SQL Server, ponieważ SQL Server dodaje mnóstwo szlamu do tego, co jest zaszyfrowane, w tym losowy wektor inicjalizacji. Z książki Michaela Cole'a "Pro T-SQL 2005 Programmer's Guide" (chociaż 2008 robi to w ten sam sposób):



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. zduplikowane naruszenie wartości null w ograniczeniu UNIQUE KEY w Mssql

  2. Utwórz wyzwalacz DML w SQL Server

  3. Jak używać if..else w przepływie danych na podstawie wartości zmiennych użytkownika w SSIS

  4. Jak mogę zwiększyć wartość dla każdej iteracji INSERT INTO?

  5. Jak wybrać nazwy kolumn z wielu tabel w SQL Server 2000-2008, które znajdują się w zestawie nazw?