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
VarBinaryToBase64funzione 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 usiAesclasse). -
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'
authenticatorparametro 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):