Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como obter compatibilidade entre a criptografia C # e SQL2k8 AES?


Há algumas coisas que eu olharia:

  1. 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 seu VarBinaryToBase64 função pegar um parâmetro nvarchar, será Unicode.

  2. Certifique-se de que ambos os algoritmos de criptografia usem o mesmo tamanho de bloco. No SQL, você determina o algoritmo quando chama CREATE SYMMETRIC KEY . Se você não especificar um algoritmo, ele usará AES256. Em .NET usando RijndaelManaged , acredito que o tamanho do bloco padrão seja 128, mas você pode configurá-lo para 256 (você não pode se usar o Aes classe).

  3. 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 o authenticator 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):