Ci sono un paio di cose che vorrei guardare:
-
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. -
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 usandoRijndaelManaged
, credo che la dimensione del blocco predefinita sia 128 ma puoi impostarla su 256 (non puoi se usiAes
classe). -
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):