Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come ottenere la compatibilità tra la crittografia AES C# e SQL2k8?

Ci sono un paio di cose che vorrei guardare:

  1. Assicurati assolutamente che il testo in chiaro sia identico nel contenuto e nella codifica. IIRC, gli stream predefiniti sono UTF-8 mentre se il tuo VarBinaryToBase64 funzione prende un parametro nvarchar, sarà Unicode.

  2. Assicurati che entrambi gli algoritmi di crittografia utilizzino la stessa dimensione del blocco. In SQL, determini l'algoritmo quando chiami CREATE SYMMETRIC KEY . Se non specifichi un algoritmo, utilizza AES256. In .NET usando RijndaelManaged , credo che la dimensione del blocco predefinita sia 128 ma puoi impostarla su 256 (non puoi se usi Aes classe).

  3. L'ultima cosa che cercherei è come SQL Server gestisce i vettori di inizializzazione come hai menzionato nel tuo post modificato. Voglio dire che usa l'authenticator parametro per questo, ma è un'ipotesi folle.

MODIFICA

Ero lontano. Dato quello che ho scoperto, non è possibile utilizzare una classe .NET per decrittografare il testo crittografato dalla crittografia integrata di SQL Server perché SQL Server aggiunge un sacco di appiccicoso a ciò che viene crittografato, incluso un vettore di inizializzazione casuale. Dal libro di Michael Cole "Pro T-SQL 2005 Programmer's Guide" (sebbene il 2008 lo faccia allo stesso modo):