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

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Golang은 풍부한 표준 라이브러리와 내장 기능을 갖춘 새로운 고성능 프로그래밍 언어입니다. 여기에는 파일 확인, 데이터 확인 등을 위해 데이터의 해시 값을 생성하는 데 사용할 수 있는 해시 함수가 포함됩니다. 이번 글에서는 Golang에서 흔히 사용되는 hash, crc32, md5, sha1 함수의 계산 방법과 응용을 소개하겠습니다. 1. 해시 함수 Golang의 해시 함수에는 SHA-1, MD5, SHA-224, SHA-256, SH 등 다양한 해시 알고리즘이 포함되어 있습니다.

해시 연산 //해시 테이블의 필드에 값을 할당합니다. 성공하면 1을, 실패하면 0을 반환합니다. 해시 테이블이 없으면 테이블이 먼저 생성된 후 값이 할당됩니다. 필드가 이미 있으면 이전 값을 덮어씁니다. $ret=$redis->hSet('user','realname','jetwu');//해시 테이블에서 지정된 필드의 값을 가져옵니다. 해시 테이블이 없으면 false를 반환합니다. $ret=$redis->hGet('사용자','지역

Golang 파일 읽기 작업: 대용량 파일을 빠르게 읽으려면 특정 코드 예제가 필요합니다. Golang 프로그래밍에서 파일 읽기는 매우 일반적인 작업입니다. 그러나 대용량 파일을 읽어야 하는 경우 일반적으로 시간과 리소스가 많이 소모되는 작업입니다. 따라서 대용량 파일을 빠르게 읽는 방법은 논의할 가치가 있는 주제입니다. 이 기사에서는 Golang의 기능과 몇 가지 기술을 사용하여 대용량 파일을 빠르게 읽는 방법을 소개하고 구체적인 코드 예제를 제공합니다. bufio를 사용하여 Golang에서 파일 읽기, 파일 읽기

Java 함수 라이브러리에서 MessageDigest 클래스는 해시 알고리즘에 사용될 수 있으며 다음을 포함하여 MD5, SHA 및 기타 해시 알고리즘의 구현을 제공합니다. 1. MD5 알고리즘: 인스턴스를 얻으려면 MessageDigest.getInstance("MD5")를 사용합니다. 2.SHA 알고리즘: SHA-1, SHA-256, SHA-384 및 SHA-512를 포함하여 MessageDigest.getInstance("SHA-256")를 사용하여 인스턴스를 얻습니다. 3. 기타 해싱 알고리즘: Algorithms.MessageDigest 또는 BouncyCastle 라이브러리와 같은 타사 라이브러리를 사용할 수 있습니다.

Java를 사용하여 MD5 해시 알고리즘을 구현하는 방법 MD5(MessageDigestAlgorithm5)는 데이터를 암호화하고 확인하는 데 일반적으로 사용되는 해시 알고리즘입니다. Java에서는 MessageDigest 클래스를 사용하여 MD5 해시 알고리즘을 구현할 수 있습니다. 다음은 Java를 사용하여 MD5 알고리즘을 구현하는 방법을 보여주는 간단한 샘플 코드입니다. importjava.security.MessageDigest;

Laravel은 현재 가장 인기 있는 PHP 웹 프레임워크 중 하나이며 개발자에게 많은 강력한 기능과 구성 요소를 제공하며 LaravelHash도 그 중 하나입니다. LaravelHash는 비밀번호를 안전하게 유지하고 애플리케이션의 사용자 데이터를 더욱 안전하게 만드는 데 사용할 수 있는 비밀번호 해싱용 PHP 라이브러리입니다. 이 글에서는 LaravelHash의 작동 방식과 이를 사용하여 비밀번호를 해시하고 확인하는 방법을 알아봅니다. 라라 학습을 위한 필수 지식

해시는 "해시"라고도 합니다. 임의의 길이의 입력 정보 집합을 받아 해시 알고리즘을 통해 고정 길이 데이터 지문으로 변환합니다. 일반적으로 해시는 메시지 요약으로 이해될 수 있습니다.

공개된 Python 기반 기술: 해시 테이블 구현 방법 해시 테이블은 컴퓨터 분야에서 매우 일반적이고 중요한 데이터 구조로, 많은 수의 키-값 쌍을 효율적으로 저장하고 검색할 수 있습니다. Python에서는 사전을 사용하여 해시 테이블을 사용할 수 있지만 구현 세부 사항을 깊이 이해하는 사람은 거의 없습니다. 이 기사에서는 Python에서 해시 테이블의 기본 구현 기술을 공개하고 구체적인 코드 예제를 제공합니다. 해시 테이블의 핵심 아이디어는 키를 단순히 순차적으로 저장하는 것이 아니라 해시 함수를 통해 고정된 크기의 배열로 매핑하는 것입니다.
