Há algumas coisas que eu olharia:
-
Certifique-se de que o texto simples é idêntico em conteúdo e codificação. IIRC, fluxos padrão para UTF-8, enquanto que se o seuVarBinaryToBase64
função pegar um parâmetro nvarchar, será Unicode.
-
Certifique-se de que ambos os algoritmos de criptografia usem o mesmo tamanho de bloco. No SQL, você determina o algoritmo quando chamaCREATE SYMMETRIC KEY
. Se você não especificar um algoritmo, ele usará AES256. Em .NET usandoRijndaelManaged
, acredito que o tamanho do bloco padrão seja 128, mas você pode configurá-lo para 256 (você não pode se usar oAes
classe).
-
A última coisa que eu procuraria é como o SQL Server lida com os vetores de inicialização, como você mencionou em sua postagem alterada. Eu quero dizer que ele usa oauthenticator
parâmetro para isso, mas isso é um palpite.
EDITAR
Eu estava longe. Dado o que descobri, você não pode usar uma classe .NET para descriptografar texto criptografado pela criptografia interna do SQL Server porque o SQL Server adiciona um monte de gosma ao que é criptografado, incluindo um vetor de inicialização aleatório. Do livro de Michael Cole "Pro T-SQL 2005 Programmer's Guide" (embora 2008 faça isso da mesma maneira):