Der er et par ting, jeg ville se på:
-
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. -
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 afRijndaelManaged
, Jeg tror, at standardblokstørrelsen er 128, men du kan indstille den til 256 (det kan du ikke, hvis du brugerAes
klasse). -
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):