sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan får man kompatibilitet mellem C# og SQL2k8 AES-kryptering?

Der er et par ting, jeg ville se på:

  1. Sørg for, at klarteksten er identisk i indhold og kodning. IIRC, streams som standard til UTF-8, mens hvis din VarBinaryToBase64 funktionen tager en nvarchar-parameter, vil det være Unicode.

  2. Sørg for, at begge krypteringsalgoritmer bruger samme blokstørrelse. I SQL bestemmer du algoritmen, når du kalder CREATE SYMMETRIC KEY . Hvis du ikke angiver en algoritme, bruger den AES256. I .NET ved hjælp af RijndaelManaged , Jeg tror, ​​at standardblokstørrelsen er 128, men du kan indstille den til 256 (det kan du ikke, hvis du bruger Aes klasse).

  3. Den sidste ting, jeg ville kigge efter, er, hvordan SQL Server håndterer initialiseringsvektorer, som du nævnte i dit ændrede indlæg. Jeg vil sige, at den bruger authenticator parameter for dette, men det er et vildt gæt.

REDIGER

Jeg var langt væk. I betragtning af, hvad jeg har opdaget, kan du ikke bruge en .NET-klasse til at dekryptere tekst, der er krypteret med SQL Servers indbyggede kryptering, fordi SQL Server tilføjer en masse goo til det, der bliver krypteret, inklusive en tilfældig initialiseringsvektor. Fra Michael Coles bog "Pro T-SQL 2005 Programmer's Guide" (selvom 2008 gør dette på samme måde):



  1. EBS 12.2.5 og nyere:Loginsideknap Fejljustering

  2. Hvordan forbinder man R til Oracle?

  3. pg_stat_activity - hvordan man kan se den aktuelle aktivitet i en kørende lagret procedure

  4. PHP/MySQL - Lagring af array-data som JSON, dårlig praksis?