>  기사  >  백엔드 개발  >  Python 3.3 `hash()` 함수가 동일한 문자열에 대해 다른 결과를 생성하는 이유는 무엇입니까?

Python 3.3 `hash()` 함수가 동일한 문자열에 대해 다른 결과를 생성하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-03 10:20:29365검색

Why Does the Python 3.3 `hash()` Function Produce Different Results for the Same String?

Python 3.3 해시 함수 불일치: 보안 메커니즘 공개

Python 3.3에서 hash() 함수는 다양한 결과를 반환하는 것으로 관찰되었습니다. 여러 세션에서 동일한 문자열에 대해. 이 수수께끼처럼 보이는 동작은 서비스 거부 공격을 막기 위해 구현된 의도적인 보안 메커니즘에 뿌리를 두고 있습니다.

이 메커니즘을 이해하려면 Python이 시작 시 설정된 무작위 해시 시드를 활용한다는 점을 인식하는 것이 중요합니다. 이 오프셋을 해시 계산에 통합함으로써 공격자는 특별히 충돌을 일으키도록 의도된 키를 설계할 수 있는 능력을 박탈당합니다.

설명하기 위해 문자열 "235"의 해시 값을 고려하십시오:

>>> hash("235")
-310569535015251310

새 Python 콘솔을 시작하면 해시 값이 변경됩니다.

>>> hash("235")
-1900164331622581997

이 가변성은 최악의 사전 삽입 성능을 악용하여 O(n^ 2) 복잡성. 결과적으로 공격자는 어떤 키가 충돌하여 서비스 거부를 유발할지 예측할 수 없습니다.

그러나 오프셋이 단순히 단순한 덧셈이나 뺄셈을 수반하지 않는다는 점에 주목할 필요가 있습니다. 이는 접두사와 접미사로 구성되며 둘 다 예측할 수 없고 지속적으로 변경됩니다. 이로 인해 오프셋 저장 및 활용이 복잡해집니다.

또는 보다 안정적인 해싱 메커니즘이 필요한 애플리케이션의 경우 강력한 암호화 해시 기능을 제공하는 hashlib 모듈을 탐색할 수 있습니다. 신뢰성 때문에 pybloom 프로젝트에서 선호되는 선택입니다.

위 내용은 Python 3.3 `hash()` 함수가 동일한 문자열에 대해 다른 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.