Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да получите съвместимост между C# и SQL2k8 AES криптиране?

Има няколко неща, които бих разгледал:

  1. Уверете се, че обикновеният текст е идентичен по съдържание и кодиране. IIRC, потоците по подразбиране са UTF-8, докато ако вашият VarBinaryToBase64 функцията вземе параметър nvarchar, той ще бъде Unicode.

  2. Уверете се, че и двата алгоритъма за криптиране използват един и същ размер на блока. В SQL вие определяте алгоритъма, когато извиквате CREATE SYMMETRIC KEY . Ако не посочите алгоритъм, той използва AES256. В .NET с помощта на RijndaelManaged , смятам, че размерът на блока по подразбиране е 128, но можете да го зададете на 256 (не можете, ако използвате Aes клас).

  3. Последното нещо, което бих търсил, е как SQL Server се справя с инициализационните вектори, както споменахте във вашата променена публикация. Искам да кажа, че използва authenticator параметър за това, но това е странно предположение.

РЕДАКТИРАНЕ

Бях далеч. Като се има предвид това, което открих, не можете да използвате .NET клас за декриптиране на текст, криптиран от вграденото криптиране на SQL Server, защото SQL Server добавя куп слуз към това, което се криптира, включително вектор за произволна инициализация. От книгата на Майкъл Коул „Pro T-SQL 2005 Programmer's Guide“ (въпреки че 2008 прави това по същия начин):



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да проектирам SQL рекурсивна заявка?

  2. Клаузата OrderBy води до различни набори резултати, когато колоната за поръчка има едни и същи данни

  3. Неуспешно извикване на отдалечена процедура с sql сървър 2008 R2

  4. Празно изявление в T-SQL

  5. Как да възстановите база данни на SQL Server на Mac с помощта на Azure Data Studio