SQL Server : Générer un hash MD5 en Transact-SQL identique au hash MD5 MySQL

Comme indiqué dans mon billet précédent, je travaille actuellement sur une migration de base de données de MySQL vers SQL Server. Ce billet est un mémo personnel (donc, un peu rédigé à la va-vite) mais qui sait… il pourrait vous être utile. ^^

SQL Server et MySQL ne retournent pas le même résultat lors d’un hash MD5 :

Différence entre hash MD5 SQL Server et MySQL
SQL Server MySQL
 HASHBYTES('MD5', 'Test')   MD5('Test') 
 0x0CBC6611F5540BD0809A388DC95A615B   0cbc6611f5540bd0809a388dc95a615b 

 

Comme vous pouvez le constater, les résultats ne sont pas tout à fait identiques. Si vous souhaitez obtenir un hash MD5 en Transact-SQL rigoureusement identique à un hash MySQL, la commande à saisir est :

CONVERT(NVARCHAR(32),HASHBYTES('MD5', cast('Test' as varchar)),2)

 

Pour les versions antérieures à SQL Server 2008, la fonction CONVERT() est inopérante. Préférez :

SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',cast('Test' as varchar))),3,32)

 

Et le tour est joué ^^

PS : j’avoue ne pas avoir le temps de détailler la commande. Si vous souhaitez de plus amples explications, n’hésitez pas à me contacter. 🙂