Obrigado pela menção :-)
Eu não respondi antes porque não tenho domínio de certos detalhes, mas enfim, segue um exemplo com o pouco que sei.
Python faz algo do tipo com o hash de strings. Ou seja, se vc fizer um programa que faz print(hash('abc'))
e rodar várias vezes, a cada execução terá um resultado diferente.
Isso porque o algoritmo de hash usa um seed aleatório cada vez que o Python é executado. Ou seja, durante uma execução do programa, o hash de uma string será o mesmo, mas entre diferentes execuções, não é mais garantido que seja o mesmo das execuções anteriores.
Neste caso, seria completamente inadequado para criptografia ou verificação de integridade (checksum), os usos mais comuns de um algoritmo de hash.
O objetivo de se usar um seed aleatório é para evitar esta vulnerabilidade. Esta é a parte que não domino, então vou só mencionar a documentação:
By default, the hash() values of str and bytes objects are "salted" with an unpredictable random value. Although they remain constant within an individual Python process, they are not predictable between repeated invocations of Python.
This is intended to provide protection against a denial-of-service caused by carefully-chosen inputs that exploit the worst case performance of a dict insertion, O(n^2) complexity. See http://www.ocert.org/advisories/ocert-2011-003.html for details.
Em tradução livre (ênfase minha):
Por padrão, para objetos
str
ebytes
, é adicionado um salt aleatório ao valor de__hash__()
. Embora este permaneça constante ao longo de um processo Python, os valores não são previsíveis entre repetidas invocações do Python.Isto é intencional, para proteger contra ataques de negação de serviço causados por entradas bem escolhidas que exploram o pior caso de desempenho de inserção em dicionários, que é O(n^2). Veja http://www.ocert.org/advisories/ocert-2011-003.html para mais detalhes.
Enfim, este é um caso em que o uso do seed é interessante.