sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo obtener compatibilidad entre C# y SQL2k8 AES Encryption?

Hay un par de cosas que miraría:

  1. Asegúrese absolutamente de que el texto sin formato sea idéntico en contenido y codificación. IIRC, transmite por defecto a UTF-8 mientras que si su VarBinaryToBase64 la función toma un parámetro nvarchar, será Unicode.

  2. Asegúrese de que ambos algoritmos de cifrado utilicen el mismo tamaño de bloque. En SQL, usted determina el algoritmo cuando llama a CREATE SYMMETRIC KEY . Si no especifica un algoritmo, utiliza AES256. En .NET usando RijndaelManaged , creo que el tamaño de bloque predeterminado es 128, pero puede configurarlo en 256 (no puede hacerlo si usa Aes clase).

  3. Lo último que buscaría es cómo SQL Server trata con los vectores de inicialización como mencionó en su publicación modificada. Quiero decir que usa el authenticator parámetro para esto, pero eso es una suposición descabellada.

EDITAR

Yo estaba muy lejos. Dado lo que descubrí, no puede usar una clase .NET para descifrar texto cifrado por el cifrado integrado de SQL Server porque SQL Server agrega un montón de cosas pegajosas a lo que se cifra, incluido un vector de inicialización aleatorio. Del libro de Michael Cole "Pro T-SQL 2005 Programmer's Guide" (aunque 2008 hace esto de la misma manera):