해시와 해싱은 모두 해시라는 단어에서 유래되었으며 전자는 음역이고 후자는 자유 번역입니다. 임의 길이의 이진 값을 고정 길이 이진 값으로 매핑할 수 있는 알고리즘입니다. 매핑된 고정 길이 이진 값을 해시 값이라고 합니다. 우수한 해시 알고리즘은 다음 요구 사항을 충족해야 합니다.
는 해시 값에서 원본 데이터를 역으로 추론할 수 없습니다.
는 입력 데이터에 매우 민감하며 다른 비트로 인해 해시 값이 매우 달라집니다. 해시 충돌 가능성은 매우 작아야 합니다.
해시 알고리즘의 계산 프로세스는 충분히 간단하고 효율적이어야 하며, 원본 데이터가 매우 길더라도 해시 값을 빠르게 얻을 수 있습니다.
2. 해시 알고리즘
일반 텍스트 비밀번호는 해시 값 암호문에서 유추할 수 없으며 해시 충돌 가능성이 상대적으로 적습니다. 이 두 가지 점은 안전한 암호화 방법으로서 해시 알고리즘의 신뢰성을 보장합니다.
해싱 알고리즘이 해시 충돌을 완전히 피할 수는 없지만 최소화할 수만 있는 이유는 무엇입니까?
비둘기 둥지 원리에 따르면 11마리의 비둘기가 10개의 비둘기장으로 날아간다면 하나의 비둘기장에는 2마리 이상의 비둘기가 있어야 합니다. 그러면 해시값의 길이가 고정되어 해시값이 소진될 수 있다고 판단하지만, 이론적으로는 원본 데이터가 무한하므로 해시 충돌이 발생할 수 있습니다.
이 응용 프로그램 시나리오는 해시 알고리즘의 기능 1과 3을 사용합니다. 그 중 3개는 암호가 순방향으로 해독되기 매우 어렵다는 것을 보장합니다(예를 들어 MD5를 사용하면 해시 값 길이는 128비트이며 2^128 다름 해시 값은 해독하기가 매우 어렵습니다.
보안 분야에 절대적인 보안은 없습니다. MD5는 해독하기 어렵지만 여전히 해독할 수 있는 방법이 있습니다. 예를 들어 레인보우 테이블 매칭을 사용하면 일반적인 비밀번호를 쉽게 해독할 수 있습니다.
그래서 일반적으로 우리는 안전한 암호화를 위해 솔티드 해시 알고리즘을 사용합니다. 솔팅 방법은 엄격하게 기밀로 유지되어야 하므로 크래킹의 난이도와 비용이 크게 증가합니다.
2.2 고유 플래그
특정 규칙에 따라 대용량 파일에서 일부 바이너리 데이터를 가져와 해시 알고리즘을 사용하여 파일의 고유 식별자인 해시 값을 얻을 수 있습니다. 이런 방식으로 동일한 파일은 동일한 해시 값, 즉 동일한 고유 식별자를 가져야 합니다. 서로 다른 파일은 해시 값의 서로 다른 고유 식별자를 가질 확률이 높습니다.
해시 충돌이 발생하더라도 두 파일의 모든 바이너리 데이터를 자세히 비교하여 동일한 파일인지 여부를 추가로 확인하세요. 이 이벤트가 발생할 확률은 너무 낮습니다. 그러나 이 솔루션은 효율성과 안정성을 모두 보장합니다.
이 응용 시나리오는 해시 알고리즘의 기능 2와 3을 사용합니다.
2.3 데이터 검증
그래서 먼저 모든 부분을 해시하고 시드 파일에 저장합니다. 모든 부분을 다운로드한 후 모든 부분을 해시하여 해시 값을 얻은 다음 이를 시드 파일의 부분과 비교하여 파일이 완전한지 확인합니다.
이 애플리케이션 시나리오는 해시 알고리즘의 기능 2와 4를 사용합니다.
2.4 해시 함수
2.5 로드 밸런싱
클라이언트의 IP 또는 세션 ID를 해시하고, 얻은 해시 값을 서버 수로 모듈로화할 수 있습니다. 얻은 최종 값은 세션 고정 목적을 달성할 수 있도록 라우팅해야 하는 서버입니다.
2.6 데이터 샤딩
데이터에 대해 해시 계산을 수행하고, 얻은 해시 값을 서버 수 N의 모듈로 사용합니다. 동일한 결과를 갖는 데이터는 동일한 서버에 할당되어 처리를 위해 이 서버로 전달됩니다. N개의 서버가 대용량 데이터를 병렬로 처리하고 최종적으로 결과를 병합합니다.
대용량 데이터를 분산 캐시나 분산 데이터베이스에 저장하는 개념은 위의 데이터 샤딩과 비슷합니다. 그런데 원래 설정된 서버 수가 부족할 경우 어떻게 해야 할까요?
단순히 몇 대의 머신을 추가하는 것만으로는 해결할 수 없습니다. 이렇게 하면 해시 값의 모듈로 연산이 파괴되고 캐시 침투가 발생하여 눈사태 효과가 발생합니다. 마찬가지로 기계 결함이 제거되면 동일한 문제가 발생할 수 있습니다. 이때 이 문제를 해결하려면 일관된 해싱 알고리즘을 사용해야 합니다.
일관된 해시 알고리즘은 단순히 링에 2^32개의 노드로 해시 링을 구성하고 서버 IP와 파일을 해당 노드에 해시하는 것입니다. 모든 파일이 시계 방향으로 만나는 첫 번째 서버는 해당 파일이 저장된 서버입니다. 이러한 방식으로 서버를 추가하거나 삭제할 때 영향을 받는 파일 수를 제어할 수 있으며 글로벌 사태가 발생하지 않습니다.
해시 링
그러나 일정 확률로 서버 IP가 해시 링에 매핑되면 해시 링이 왜곡될 수 있습니다. 이로 인해 서버의 파일 배포가 극도로 고르지 않게 되고 성능이 저하됩니다. a 서버를 추가하거나 삭제할 때 눈사태 효과가 발생하기 쉽습니다.
해시 링의 왜곡
모든 서버 노드가 해시 링에 고르게 분산되도록 이러한 서버에 여러 개의 가상 노드를 인위적으로 추가할 수 있습니다.
가상 노드가 포함된 해시 링
해시 알고리즘의 사용 시나리오는 위보다 훨씬 다양하며 CRC 검사도 있습니다.
위 내용은 하나의 기사로 해시 알고리즘과 애플리케이션 시나리오를 이해하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!