Mi pregunta está relacionada con el siguiente experimento con dos instancias:
Instancia Express de SQL Server 2017 (Microsoft SQL Server 2017 (RTM-CU16)) Instancia
SQL Server 2014 Express (Microsoft SQL Server 2014 (SP2-CU18))
Utilicé la función ENCRYPTBYPASSPHRASE para cifrar un texto y utilicé el resultado como @ciphertext para DECRYPTBYPASSPHRASE . El resultado de mis pruebas fueron estas:
Según esta corrección de Microsoft ,
[...] SQL Server 2017 usa el algoritmo de hash SHA2 para codificar la frase de contraseña. SQL Server 2016 y versiones anteriores de SQL Server usan el algoritmo SHA1 que ya no se considera seguro.
Pero, ¿cómo sabe cuál fue el algoritmo utilizado para cifrar datos si no hay un argumento relacionado con eso en la función DECRYPTBYPASSPHRASE? ¿Forma parte de los datos cifrados?
Según los resultados de mis pruebas, supongo que SQL Server siempre usa la versión más nueva del algoritmo disponible en la instancia para cifrar datos, pero intenta todos los algoritmos para descifrar los datos hasta que encuentre uno que se ajuste o devuelva NULL cuando no se encuentre el algoritmo correspondiente . Sin embargo, es solo una suposición, ya que no pude encontrar ninguna manera de verificar qué algoritmo de hash usó SQL Server para descifrar los datos cifrados.