Er zijn een paar dingen waar ik naar zou kijken:
-
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. -
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 metRijndaelManaged
, Ik geloof dat de standaardblokgrootte 128 is, maar je kunt deze instellen op 256 (dat kan niet als je deAes
gebruikt klas). -
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):