Moje pytanie dotyczy następującego eksperymentu z dwoma instancjami:
Instancja SQL Server 2017 Express (Microsoft SQL Server 2017 (RTM-CU16)) Instancja
SQL Server 2014 Express (Microsoft SQL Server 2014 (SP2-CU18))
Użyłem funkcji ENCRYPTBYPASSPHRASE do zaszyfrowania tekstu i użyłem wyniku jako @ciphertext dla DECRYPTBYPASSPHRASE . Wyniki moich testów były następujące:
Zgodnie z tym Microsoft Fix ,
[...] SQL Server 2017 używa algorytmu mieszającego SHA2 do mieszania hasła. SQL Server 2016 i wcześniejsze wersje SQL Server używają algorytmu SHA1, który nie jest już uważany za bezpieczny.
Ale skąd ma wiedzieć, jakiego algorytmu użyto do szyfrowania danych, jeśli nie ma argumentu związanego z tym w funkcji DECRYPTBYPASSPHRASE? Czy to część zaszyfrowanych danych?
Według wyników moich testów SQL Server zawsze używa nowszej wersji algorytmu dostępnego w instancji do szyfrowania danych, ale próbuje wszystkich algorytmów w celu odszyfrowania danych, dopóki nie znajdzie takiego, który pasuje lub zwraca NULL, gdy nie zostanie znaleziony odpowiedni algorytm . To tylko przypuszczenie, ponieważ nie mogłem znaleźć żadnego sposobu, aby sprawdzić, jakiego algorytmu haszującego SQL Server użył do odszyfrowania zaszyfrowanych danych.