sql >> Database >  >> RDS >> Sqlserver

Hoe krijg ik compatibiliteit tussen C# en SQL2k8 AES-codering?

Er zijn een paar dingen waar ik naar zou kijken:

  1. Zorg er absoluut voor dat de leesbare tekst identiek is qua inhoud en codering. IIRC, streams standaard naar UTF-8 terwijl als uw VarBinaryToBase64 functie een nvarchar-parameter nemen, zal het Unicode zijn.

  2. Zorg ervoor dat beide versleutelingsalgoritmen dezelfde blokgrootte gebruiken. In SQL bepaalt u het algoritme wanneer u CREATE SYMMETRIC KEY . aanroept . Als u geen algoritme opgeeft, gebruikt het AES256. In .NET met RijndaelManaged , Ik geloof dat de standaardblokgrootte 128 is, maar je kunt deze instellen op 256 (dat kan niet als je de Aes gebruikt klas).

  3. Het laatste waar ik naar zou zoeken, is hoe SQL Server omgaat met initialisatievectoren, zoals je in je gewijzigde bericht hebt vermeld. Ik wil zeggen dat het de authenticator . gebruikt parameter hiervoor, maar dat is een wilde gok.

BEWERKEN

Ik was ver weg. Gezien wat ik heb ontdekt, kun je geen .NET-klasse gebruiken om tekst te decoderen die is versleuteld met de ingebouwde versleuteling van SQL Server, omdat SQL Server een hoop slijm toevoegt aan wat wordt versleuteld, inclusief een willekeurige initialisatievector. Uit Michael Cole's boek "Pro T-SQL 2005 Programmer's Guide" (hoewel 2008 dit op dezelfde manier doet):



  1. Kan JSON van PostgreSQL niet invoegen in elasticsearch. Foutmelding - "Uitzondering bij het uitvoeren van JDBC-query"

  2. Oracle groep/tel query

  3. Zoektabel met som van ALLE vorige posities, exclusief huidige positie

  4. Nieuwe traceervlag om tabelvariabele prestaties te herstellen