Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment obtenir la compatibilité entre C# et le cryptage AES SQL2k8 ?

Il y a deux ou trois choses que j'examinerais :

  1. Assurez-vous absolument que le texte en clair est identique en termes de contenu et d'encodage. IIRC, diffuse par défaut UTF-8 alors que si votre VarBinaryToBase64 fonction prend un paramètre nvarchar, ce sera Unicode.

  2. Assurez-vous que les deux algorithmes de chiffrement utilisent la même taille de bloc. En SQL, vous déterminez l'algorithme lorsque vous appelez CREATE SYMMETRIC KEY . Si vous ne spécifiez pas d'algorithme, il utilise AES256. Dans .NET en utilisant RijndaelManaged , je crois que la taille de bloc par défaut est de 128 mais vous pouvez la définir sur 256 (vous ne pouvez pas si vous utilisez le Aes classe).

  3. La dernière chose que je chercherais est de savoir comment SQL Server traite les vecteurs d'initialisation, comme vous l'avez mentionné dans votre message modifié. Je veux dire qu'il utilise l'authenticator paramètre pour cela, mais c'est une supposition folle.

MODIFIER

J'étais loin. Compte tenu de ce que j'ai découvert, vous ne pouvez pas utiliser une classe .NET pour déchiffrer du texte chiffré par le chiffrement intégré de SQL Server, car SQL Server ajoute un tas de choses à ce qui est chiffré, y compris un vecteur d'initialisation aléatoire. Extrait du livre de Michael Cole "Pro T-SQL 2005 Programmer's Guide" (bien que 2008 le fasse de la même manière):