我的问题与以下两个实例的实验有关:
SQL Server 2017 Express实例(Microsoft SQL Server 2017(RTM-CU16))
SQL Server 2014 Express实例(Microsoft SQL Server 2014(SP2-CU18))
我使用函数ENCRYPTBYPASSPHRASE加密文本,并将结果用作DECRYPTBYPASSPHRASE的@ciphertext。我的测试结果如下:
根据此Microsoft修复程序,
[...] SQL Server 2017使用SHA2哈希算法来哈希密码。SQL Server 2016和早期版本的SQL Server使用不再被视为安全的SHA1算法。
但是,如果在函数DECRYPTBYPASSPHRASE上没有与该参数相关的参数,它怎么知道用于加密数据的算法是什么?它是加密数据的一部分吗?
根据我的测试结果,我猜想SQL Server总是使用实例上可用的较新版本的算法来加密数据,但是尝试所有算法来解密数据,直到找到适合的算法或找不到对应的算法时返回NULL。 。不过,这只是一个猜测,因为我找不到任何方法来检查SQL Server用于解密加密数据的哈希算法。