> 백엔드 개발 > 파이썬 튜토리얼 > 안전한 비밀번호 해싱을 위한 Bcrypt 알고리즘

안전한 비밀번호 해싱을 위한 Bcrypt 알고리즘

Patricia Arquette
풀어 주다: 2024-12-16 03:34:10
원래의
266명이 탐색했습니다.

해싱은 되돌릴 수 없는 암호화 기능입니다. 고정 크기 값을 생성하려면 임의 크기의 입력이 필요합니다. 이러한 고정된 크기의 값을 해시값이라고 하며, 암호화 함수를 해싱 함수라고 합니다. 해싱은 일관되고 예측 가능한 특성을 갖고 있습니다. 즉, 동일한 입력이 항상 동일한 해시 값을 생성한다는 의미입니다. 또한 눈사태 효과를 나타냅니다. 이는 입력이 조금만 변경되어도 해시 값이 크게 달라져 높은 보안성과 불확실성을 보장한다는 의미입니다.

The Bcrypt Algorithm for Secure Password Hashing

해싱은 종종 솔트(salt)라는 고유한 임의 문자열을 해싱 전에 입력에 추가하여 동일한 입력에 대해서도 각 해시를 고유하게 만드는 솔티드 해싱을 사용하는 경우가 많습니다.

솔티드 해싱은 주로 비밀번호 해싱에 사용됩니다. 그러한 알고리즘 중 하나가 bcrypt 알고리즘입니다.

Bcrypt 알고리즘

Bcrypt 알고리즘은 Blowfish 암호화 알고리즘을 기반으로 합니다. bcrypt는 각 비밀번호에 대해 고유한 솔트

(임의 문자열)를 생성한 다음 해싱하기 전에 솔트를 비밀번호와 결합합니다. . 이로 인해 Bcrypt는 무차별 대입 공격에 저항할 수 있게 되었습니다.

Bcrypt 작동 방식

  1. 소금 생성:

    Bcrypt는 길이가 16바이트이고 일반적으로 Base64 형식인 임의 솔트를 생성합니다.
  2. 주어진 문자열 해싱:

    솔트가 비밀번호와 결합되고 결과 문자열이 Blowfish 암호화 알고리즘을 통해 전달됩니다. bcrypt는 작업 요소에 의해 정의된 여러 라운드의 해싱을 적용합니다. 라운드 수가 많아 계산 비용이 많이 들고 무차별 대입 공격에 대한 저항력이 향상됩니다.

    비용이라고도 하는 작업 요소는 로그 값 2로 정의됩니다. 비용이 12인 경우 이는 2^12 라운드를 의미합니다. 비용 요소가 높을수록 해시를 생성하는 데 더 많은 시간이 걸리므로 공격자가 비밀번호를 무차별 대입 공격하기가 더 어려워집니다.
  3. Bcrypt 해시의 형식 및 길이:

 y$odwBFokG9vTK/BAaRXKKl.9Q8KHXHeYSqpLi/gSNpmzSwQcaJb.gS
로그인 후 복사
로그인 후 복사

주어진 문자열은 다음으로 구성됩니다.
  • $2y$: bcrypt 버전
  • 12는 비용 요소입니다(2^12 라운드)
  • 다음 22자
  • (odwBFokG9vTK/BAaRXKKl.)는 Base64로 인코딩된 솔트
  • 입니다.
  • 나머지 문자는 Base64로 인코딩된 비밀번호와 솔트의 해시입니다.

PythonBcrypt 알고리즘구현

필수 종속성
import hashlib
import os
import base64
로그인 후 복사
로그인 후 복사

클래스 초기화
class Bcrypt:
    def __init__(self, rounds=12, salt_length=22):
        self.rounds = rounds
        self.salt_length = salt_length
로그인 후 복사
로그인 후 복사
  • Bcrypt 클래스는 비밀번호를 해시하고 확인하는 기능을 캡슐화합니다
  • 매개변수:

소금 생성

 y$odwBFokG9vTK/BAaRXKKl.9Q8KHXHeYSqpLi/gSNpmzSwQcaJb.gS
로그인 후 복사
로그인 후 복사

함수 generate_salt는 임의의 솔트를 생성합니다. 이 솔트는 동일한 비밀번호라도 서로 다른 해시를 생성하도록 비밀번호에 추가되는 고유한 값이 됩니다.

비밀번호 해싱

import hashlib
import os
import base64
로그인 후 복사
로그인 후 복사
  • 함수 bcrypt_hash는 제공된 솔트 및 비용 요소를 사용하여 비밀번호를 안전하게 해시합니다.

  • 및 함수 hash_password는 임의의 솔트로 주어진 비밀번호에 대한 보안 해시를 생성합니다.

암호:

class Bcrypt:
    def __init__(self, rounds=12, salt_length=22):
        self.rounds = rounds
        self.salt_length = salt_length
로그인 후 복사
로그인 후 복사

산출:

def generate_salt(self, salt_length=None):
        if salt_length is None:
            salt_length = self.salt_length
        return base64.b64encode(os.urandom(salt_length)).decode('utf-8')[:salt_length]
로그인 후 복사

위 내용은 안전한 비밀번호 해싱을 위한 Bcrypt 알고리즘의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿