Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie erhält man Kompatibilität zwischen C# und SQL2k8 AES-Verschlüsselung?

Es gibt ein paar Dinge, die ich mir ansehen würde:

  1. 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.

  2. 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 mit RijndaelManaged , glaube ich, dass die Standardblockgröße 128 ist, aber Sie können sie auf 256 setzen (das geht nicht, wenn Sie den Aes verwenden Klasse).

  3. 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):