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
VarBinaryToBase64Funktion 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 KEYaufrufen . 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 denAesverwenden 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
authenticatorverwendet 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):