sql >> Databasteknik >  >> RDS >> Sqlserver

Hur får man kompatibilitet mellan C# och SQL2k8 AES-kryptering?

Det finns ett par saker jag skulle titta på:

  1. Se absolut till att klartexten är identisk i innehåll och kodning. IIRC, strömmar som standard till UTF-8 medan om din VarBinaryToBase64 funktionen tar en nvarchar-parameter, det kommer att vara Unicode.

  2. Se till att båda krypteringsalgoritmerna använder samma blockstorlek. I SQL bestämmer du algoritmen när du anropar CREATE SYMMETRIC KEY . Om du inte anger en algoritm använder den AES256. I .NET med RijndaelManaged , jag tror att standardblockstorleken är 128 men du kan ställa in den till 256 (det kan du inte om du använder Aes klass).

  3. Det sista jag skulle leta efter är hur SQL Server hanterar initialiseringsvektorer som du nämnde i ditt ändrade inlägg. Jag vill säga att den använder authenticator parameter för detta, men det är en vild gissning.

REDIGERA

Jag var långt borta. Med tanke på vad jag har upptäckt kan du inte använda en .NET-klass för att dekryptera text krypterad med SQL Servers inbyggda kryptering eftersom SQL Server lägger till en massa goo till det som krypteras, inklusive en slumpmässig initialiseringsvektor. Från Michael Coles bok "Pro T-SQL 2005 Programmer's Guide" (även om 2008 gör detta på samma sätt):



  1. Trädstruktur i sql i Oracle. Hur man visar träd, underordnade noder och överordnade noder i SQL Oracle

  2. MySQL importera databas men ignorera specifik tabell

  3. MYSQL fjärranslutning kräver SSL

  4. Flera MYSQLi förberedda uttalanden