sql >> Databáze >  >> RDS >> Sqlserver

Jak získat kompatibilitu mezi C# a SQL2k8 AES Encryption?

Je několik věcí, na které bych se podíval:

  1. Zcela se ujistěte, že prostý text je identický co do obsahu a kódování. IIRC, streamuje výchozí UTF-8, zatímco pokud váš VarBinaryToBase64 funkce vezměte parametr nvarchar, bude to Unicode.

  2. Ujistěte se, že oba šifrovací algoritmy používají stejnou velikost bloku. V SQL určíte algoritmus, když zavoláte CREATE SYMMETRIC KEY . Pokud neurčíte algoritmus, použije AES256. V .NET pomocí RijndaelManaged , Věřím, že výchozí velikost bloku je 128, ale můžete ji nastavit na 256 (nemůžete, pokud použijete Aes třída).

  3. Poslední věc, kterou bych hledal, je, jak SQL Server pracuje s inicializačními vektory, jak jste zmínil ve svém upraveném příspěvku. Chci říci, že používá authenticator parametr, ale to je divoký odhad.

UPRAVIT

Byl jsem úplně mimo. Vzhledem k tomu, co jsem objevil, nemůžete použít třídu .NET k dešifrování textu zašifrovaného vestavěným šifrováním SQL Serveru, protože SQL Server přidává k zašifrovanému mnoho chyb, včetně náhodného inicializačního vektoru. Z knihy Michaela Colea "Pro T-SQL 2005 Programmer's Guide" (ačkoli 2008 to dělá stejným způsobem):



  1. SQL nerozpozná alias sloupce v klauzuli where

  2. Alias ​​sloupce nebyl rozpoznán v příkazu WHERE

  3. Přístup k zabezpečení PHP-MySql při VLOŽENÍ DO MySql a načítání z MySql na obrazovku

  4. Získejte všechny jedinečné roky ze sloupce data pomocí SQL (MySQL)