Мой вопрос связан со следующим экспериментом с двумя примерами:
Экземпляр 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 использовал для расшифровки зашифрованных данных.