은 거기에 상당한 오버헤드를 사용하여 다양한 버전의 sha 해싱하(hashlib 모듈)

StackOverflow https://stackoverflow.com/questions/2241013

  •  19-09-2019
  •  | 
  •  

문제

hashlib Python 모듈이 제공하는 다음과 같은 해시 알고리즘 생성자: md5(), sha1(), sha224(), sha256(), sha384(), 고 sha512().

가정하면 나는 원하지 않는다 사용하는 md5,거기에서 큰 차이를 사용하여 말,sha1 을 대신 sha512?을 사용하고 싶 같은 뭔가 hashlib.shaXXX(hashString).hexdigest(), 지만,그것은 단지 캐싱에 대해 확신이 들지 않 필요합(최종)추가의 오버헤드 512...

이 오버헤드를 존재하고,그렇다면,그것은 얼마나 큰가?

도움이 되었습니까?

해결책

왜 그냥 벤치마크 그것은?

>>> 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

그래서 내 컴퓨터에서, hash512 은 두 번 느린 sha1.지 GregS 말을 사용하는 이유는 무엇일 보안에 대한 해시 caching?Try builtin 해시 알고리즘을 하는 것은 정말 빨리 해야한다고 조정:

>>> s = "asdf"
>>> hash(s)
-618826466
>>> s = "xxx"
>>> hash(s)
943435
>>> hash("xxx")
943435

또는 더 나은 아직,사용 builtin Python 사전.어쩌면 당신은 우리들에게 말할 수 있는 더 많은 것에 대해 계획에 캐싱이 가능합니다.

편집: 나는 생각하고는 당신이 시도하고 있는 뭔가를 달성하기 위해 다음과 같다:

hash = hashlib.sha1(object_to_cache_as_string).hexdigest()
cache[hash] = object_to_cache

내가 무엇 refferring 하여"사용 builtin Python dictinoaries"는 단순화할 수 있습니다 위의:

cache[object_to_cache_as_string] = object_to_cache

이 방식에서는 파이썬은 해시 그래서 당신은하지 않습니다.

에 관한 특정 문제를 참조하십시오 Python 해쉬 dicts 하기 위해서는 사전에 해쉬.그리고,모두 해야 할 캐시 개체:

cache[object_to_cache] = object_to_cache

다른 팁

아마도 순진한 테스트 일 것입니다 ... 그러나 그것은 당신이 얼마나 많은 해시를하는지에 달려있는 것처럼 보입니다. SHA512의 2 블록은 SHA256의 4 블록보다 빠릅니까?

>>> import timeit
>>> import hashlib
>>> for sha in [ x for x in dir(hashlib) if x.startswith('sha') ]:
...   t = timeit.Timer("hashlib.%s(data).hexdigest()" % sha,"import hashlib; data=open('/dev/urandom','r').read(1024)")
...   print sha + "\t" + repr(t.timeit(1000))
...
sha1    0.0084478855133056641
sha224  0.034898042678833008
sha256  0.034902095794677734
sha384  0.01980900764465332
sha512  0.019846916198730469
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top