Es gibt ein paar Dinge, die ich mir ansehen würde:
-
Achten Sie unbedingt darauf, dass der Klartext inhaltlich und kodiert identisch ist. IIRC, Streams verwenden standardmäßig UTF-8, während Ihr
VarBinaryToBase64
Funktion nimmt einen nvarchar-Parameter, es wird Unicode sein. -
Stellen Sie sicher, dass beide Verschlüsselungsalgorithmen dieselbe Blockgröße verwenden. In SQL bestimmen Sie den Algorithmus, wenn Sie
CREATE SYMMETRIC KEY
aufrufen . Wenn Sie keinen Algorithmus angeben, wird AES256 verwendet. In .NET mitRijndaelManaged
, glaube ich, dass die Standardblockgröße 128 ist, aber Sie können sie auf 256 setzen (das geht nicht, wenn Sie denAes
verwenden Klasse). -
Das letzte, wonach ich suchen würde, ist, wie SQL Server mit Initialisierungsvektoren umgeht, wie Sie in Ihrem geänderten Beitrag erwähnt haben. Ich möchte sagen, dass es den
authenticator
verwendet Parameter dafür, aber das ist eine wilde Vermutung.
BEARBEITEN
Ich war weit weg. Angesichts dessen, was ich entdeckt habe, können Sie keine .NET-Klasse verwenden, um Text zu entschlüsseln, der durch die integrierte Verschlüsselung von SQL Server verschlüsselt wurde, da SQL Server dem, was verschlüsselt wird, eine Menge Schmiere hinzufügt, einschließlich eines zufälligen Initialisierungsvektors. Aus Michael Coles Buch "Pro T-SQL 2005 Programmer's Guide" (obwohl 2008 dies genauso macht):