ProgramingTip

Python 3.3의 해시 함수는 세션간에 다른 결과를 반환합니다.

bestdevel 2020. 12. 30. 23:53
반응형

Python 3.3의 해시 함수는 세션간에 다른 결과를 반환합니다.


Python 3.3에서 BloomFilter를 구현하여 세션마다 다른 결과를 얻었습니다. 이 이상한 동작을 드릴 다운하면 내부 hash () 함수가 나타납니다. 세션마다 동일한 값을 반환합니다.

예 :

>>> hash("235")
-310569535015251310

----- 새 기능 콘솔 열기 -----

>>> hash("235")
-1900164331622581997

왜 이런 일이 발생합니까? 이것이 왜 유용합니까?


Python은 무작위 해시 시드를 사용하여 공격 충돌하도록 키를 전송하여 애플리케이션의 타르 피팅을 방지합니다. 처음부터 공개를 참조하십시오 . 무작위 시드 (시작시 한 번 설정)로 해시를 상쇄에서 공격자가 더 이상 어떤 키가 충돌 예측할 수 없습니다.

PYTHONHASHSEED환경 변수를 설정하여 고정 시드를 설정하거나 기능을 중지 할 수 있습니다 . 은 기본값 이 기능 현관을 모두 비활성화하여 random고정 된 양의 정수 값으로 설정할 수 있습니다 0.

파이썬 버전 2.7 및 3.2에는 기본적으로 기능이 비활성화되어 있습니다 ( -R스위치 PYTHONHASHSEED=random를 사용 하거나 활성화하도록 설정). Python 3.3 이상에서는 기본적으로 활성화되어 있습니다.

Python 사전 또는 집합의 키 순서에 의존하고 있었다면 그렇게하지 않았습니다. Python은 해시 테이블을 사용하여 다음과 같은 유형을 구현하고 순서 는 임의의 해시 시드 아니라 삽입 및 삭제 기록에 따라 늘어납니다 .

object.__hash__()특수 메소드 문서 도 참조하십시오 .

참고 : 기본적으로 __hash__()str, bytes 및 datetime 개체의 값은 예측할 수없는 임의의 값으로 "절대"가됩니다. Python 프로세스 내에서 유지되는 Python 프로세스 내에서 유지되는 파이썬 호출 일정 문구는 예측할 수 없습니다.
이는 최악의 경우 성능 인 O (n ^ 2) 모든 것을 악용하는 신중하게 선택한 입력으로 인한 거부 서비스에 대한 제공하기위한 것입니다. 자세한 내용은 http://www.ocert.org/advisories/ocert-2011-003.html 을 참조하십시오.
해시 값을 변경하면 딕셔너리, 세트 및 기타 매핑의 반복 순서에 영향을줍니다. Python 은이 순서에 대해 보증 한 적이 없습니다 (일반적으로 32 비트와 64 비트 빌드간에).
을 (를) 참조하십시오 PYTHONHASHSEED.

해시 구현이 안정적인 필요한 경우 hashlib모듈 을 살펴보고 싶을을 구석으로입니다 . 이것은 암호화 해시 함수를 구현합니다.

pybloom 프로젝트는이 방법을 사용합니다 .

접두사와 접미사는 접미사 (각각 시작 값과 최종 XOR 값)로 구성되어있어 히도 아무 것도 없습니다. 플러스에서 조립 공격으로 시동을받을 수 없습니다.


해시 무작위 화는 Python 3에서 기본적으로 발광 합니다. 이것은 보안 기능입니다.

해시 무작위 화는 dict 구성의 최악의 경우 성능을 악용하는 신중하게 선택한 입력으로 제공 서비스 거부에 대한 보호를하기위한 것입니다.

2.6.8의 이전 버전에서는 -R 또는 PYTHONHASHSEED 환경 옵션 을 사용하여 명령 줄에서 사용할 수 있습니다.

PYTHONHASHSEED0으로 설정 하여 끌 수 있습니다 .


해시 () 는 파이썬 내장 함수 이며 문자열이나 숫자가 아닌 객체 의 해시 값을 계산하는 데 사용 합니다 .

https://docs.python.org/3.3/library/functions.html#hash 페이지에서 세부 사항을 볼 수 있습니다 .

hash () 값은 객체의 __hash__ 메소드에서 가져옵니다. 문서는 다음과 같이 사실.

기본적으로 str, bytes 및 datetime 개체 해시 () 값은 예측할 수없는 임의의 값으로 "절대"가됩니다. Python 프로세스 내에서 유지되는 Python 프로세스 내에서 유지되는 파이썬 호출 일정 문구는 예측할 수 없습니다.

이것은 다른 콘솔에서 사용하는 것이 좋습니다.

구현하는 것은 좋은 방법이 아닙니다.

문자열 해시 값을 계산하려면 hashlib를 사용 하십시오.

해시 ()는 흔들림이 아닌 목표 객체를 얻는 것을 얻습니다.

참조 URL : https://stackoverflow.com/questions/27522626/hash-function-in-python-3-3-returns-different-results-between-sessions

반응형