Meine Frage bezieht sich auf das folgende Experiment mit zwei Instanzen:
SQL Server 2017 Express-Instanz (Microsoft SQL Server 2017 (RTM-CU16))
SQL Server 2014 Express-Instanz (Microsoft SQL Server 2014 (SP2-CU18))
Ich habe die Funktion ENCRYPTBYPASSPHRASE verwendet , um einen Text zu verschlüsseln, und das Ergebnis als @ciphertext für DECRYPTBYPASSPHRASE verwendet . Das Ergebnis meiner Tests waren folgende:
Nach diesem Microsoft-Fix ,
[...] SQL Server 2017 verwendet den SHA2-Hashing-Algorithmus, um die Passphrase zu hashen. SQL Server 2016 und frühere Versionen von SQL Server verwenden den SHA1-Algorithmus, der nicht mehr als sicher gilt.
Aber woher weiß es, mit welchem Algorithmus Daten verschlüsselt wurden, wenn für die Funktion DECRYPTBYPASSPHRASE kein diesbezügliches Argument vorliegt? Ist es Teil der verschlüsselten Daten?
Aufgrund der Ergebnisse meiner Tests würde ich vermuten, dass SQL Server immer die neuere Version des auf der Instanz verfügbaren Algorithmus zum Verschlüsseln von Daten verwendet, aber alle Algorithmen versucht, Daten zu entschlüsseln, bis sie einen finden, der passt oder NULL zurückgibt, wenn kein entsprechender Algorithmus gefunden wird . Es ist jedoch nur eine Vermutung, da ich keine Möglichkeit gefunden habe, zu überprüfen, mit welchem Hashing-Algorithmus SQL Server die verschlüsselten Daten entschlüsselt hat.