¿Por qué no basta con compararlo?
>>> def sha1(s):
... return hashlib.sha1(s).hexdigest()
...
>>> def sha512(s):
... return hashlib.sha512(s).hexdigest()
...
>>> t1 = timeit.Timer("sha1('asdf' * 100)", "from __main__ import sha1")
>>> t512 = timeit.Timer("sha512('asdf' * 100)", "from __main__ import sha512")
>>> t1.timeit()
3.2463729381561279
>>> t512.timeit()
6.5079669952392578
Así que en mi máquina, hash512
es dos veces tan lento como sha1
. Pero como dijo GregS, ¿por qué usaría hash seguro para el almacenamiento en caché? Pruebe los algoritmos hash incorporadas, que sean realmente rápido y afinado:
>>> s = "asdf"
>>> hash(s)
-618826466
>>> s = "xxx"
>>> hash(s)
943435
>>> hash("xxx")
943435
O mejor aún, usar los diccionarios de Python incorporada. Tal vez puedas decirnos más sobre lo que planeas almacenar en caché.
EDIT: pienso que usted está tratando de lograr algo como esto:
hash = hashlib.sha1(object_to_cache_as_string).hexdigest()
cache[hash] = object_to_cache
Lo que estaba a refferring por "utilizar los dictinoaries Python incorporadas" es que se puede simplificar la anterior :
cache[object_to_cache_as_string] = object_to_cache
De esta manera, Python se ocupa del hash para que no tenga que hacerlo.
En cuanto a su problema particular, puede consultar Python hashable dicts para hacer un diccionario hashable. Entonces, todo lo que tenía que hacer para almacenar en caché el objeto es:
cache[object_to_cache] = object_to_cache
Si es para el almacenamiento en caché, ¿por qué necesita un hash seguro? –
Cuando probó los diferentes métodos y midió su rendimiento, ¿qué encontró? –
Lo que probablemente @GregHewgill quiso decir es que hay un conveniente módulo de biblioteca estándar 'timeit' que hace que tales mediciones sean tan triviales que sea más fácil simplemente cronometrar que preguntar sobre ello, especialmente cuando se ejecuta desde la línea de comando. –