Minha pergunta está relacionada ao seguinte experimento com duas instâncias:
Instância do SQL Server 2017 Express (Microsoft SQL Server 2017 (RTM-CU16)) Instância do
SQL Server 2014 Express (Microsoft SQL Server 2014 (SP2-CU18))
Usei a função ENCRYPTBYPASSPHRASE para criptografar um texto e usei o resultado como @ciphertext para DECRYPTBYPASSPHRASE . O resultado dos meus testes foram os seguintes:
De acordo com esta correção da Microsoft ,
[...] O SQL Server 2017 usa o algoritmo de hash SHA2 para fazer o hash da senha. O SQL Server 2016 e versões anteriores do SQL Server usam o algoritmo SHA1 que não é mais considerado seguro.
Mas como ele sabe qual foi o algoritmo usado para criptografar dados se não há argumento relacionado a isso na função DECRYPTBYPASSPHRASE? Faz parte dos dados criptografados?
Pelos resultados dos meus testes, eu acho que o SQL Server sempre usa a versão mais recente do algoritmo disponível na instância para criptografar dados, mas tenta todos os algoritmos para descriptografar dados até encontrar um que se ajuste ou retorne NULL quando nenhum algoritmo correspondente for encontrado . É apenas um palpite, já que eu não consegui encontrar nenhuma maneira de verificar qual algoritmo de hash o SQL Server usou para descriptografar os dados criptografados.