Il y a deux ou trois choses que j'examinerais :
-
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. -
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 utilisantRijndaelManaged
, 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 leAes
classe). -
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):