Моє запитання пов'язане з наступним експериментом з двома примірниками:
Екземпляр SQL Server 2017 Express (Microsoft SQL Server 2017 (RTM-CU16)) Екземпляр
SQL Server 2014 Express (Microsoft SQL Server 2014 (SP2-CU18))
Я використовував функцію ENCRYPTBYPASSPHRASE для шифрування тексту і використовував результат як @ciphertext для DECRYPTBYPASSPHRASE . Результатом моїх тестів стали такі:
Відповідно до цього виправлення Microsoft ,
[...] SQL Server 2017 використовує алгоритм хешування SHA2 для хешування парольної фрази. SQL Server 2016 та більш ранні версії SQL Server використовують алгоритм SHA1, який вже не вважається безпечним.
Але звідки відомо, що алгоритм використовувався для шифрування даних, якщо немає аргументу, пов’язаного з цим у функції DECRYPTBYPASSPHRASE? Це частина зашифрованих даних?
За результатами моїх тестів я здогадуюсь, що SQL Server завжди використовує новішу версію алгоритму, доступну для цього примірника, для шифрування даних, але намагається всі алгоритми розшифровувати дані, поки не знайде той, який відповідає або повертає NULL, коли не знайдений відповідний алгоритм. . Це лише здогадка, хоча я не міг знайти жодного способу перевірити, який алгоритм хешування SQL Server використовував для розшифрування зашифрованих даних.