Intenta interpretar el código de forma correcta previamente a aplicarlo a tu trabajo si tquieres aportar algo puedes dejarlo en la sección de comentarios.
Solución:
Puedo obtener resultados idénticos entre Python y el código T-SQL con el algoritmo MD5. por ejemplo, el NO COLLUSION
string hash a 0x5CA1A58C070F24EF1D4D2900E5727F37
en ambas plataformas.
Ejemplo de código T-SQL:
SELECT HASHBYTES('MD5', 'NO COLLUSION');
Ejemplo de código Python:
import hashlib
result = hashlib.md5(b'NO COLLUSION')
print(result.hexdigest())
No soy un experto en encriptación, pero no me queda claro qué quiere decir con “semilla de SQL”. El algoritmo MD5 no parece solicitar que el implementador agregue un número aleatorio. Tal algoritmo sería bastante inconveniente porque daría como resultado el mismo problema con el que se está enfrentando en este momento: diferentes implementaciones del mismo algoritmo hash darían resultados diferentes para la misma entrada.
Joe ha señalado correctamente que Python hashlib.md5
y SQL Server HASHBYTES('MD5', ...)
Las funciones tienen la misma salida.
Como aclaración adicional, el incorporado hash()
La función en Python no está diseñada para usarse de la misma manera. Su implementación es específica de la plataforma, varía según el tipo de objeto que se utilice y (como mencionaste) está salteado con un valor aleatorio.
No es un hash MD5, y no tendrá mucha suerte tratando de que coincida con lo producido por HASHBYTES
ya que es solo una cosa fundamentalmente diferente.
Este valor salt aleatorio se genera cuando se inicia el proceso de Python, por lo que generalmente será diferente incluso en múltiples ejecuciones de un script en la misma máquina. De los documentos:
Nota De forma predeterminada, los valores __hash__() de los objetos str y bytes se “salan” con un valor aleatorio impredecible. Aunque permanecen constantes dentro de un proceso de Python individual, no son predecibles entre invocaciones repetidas de Python.
Esto tiene como objetivo brindar protección contra una denegación de servicio causada por entradas cuidadosamente seleccionadas que explotan el peor de los casos de rendimiento de una inserción de dictado, O (n ^ 2) de complejidad. Consulte http://www.ocert.org/advisories/ocert-2011-003.html para obtener más detalles.
Al final de la post puedes encontrar las explicaciones de otros desarrolladores, tú igualmente tienes la libertad de dejar el tuyo si lo crees conveniente.