ホームページ > バックエンド開発 > Python チュートリアル > 安全なパスワードハッシュのための Bcrypt アルゴリズム

安全なパスワードハッシュのための Bcrypt アルゴリズム

Patricia Arquette
リリース: 2024-12-16 03:34:10
オリジナル
265 人が閲覧しました

ハッシュは、元に戻すことのできない暗号化機能です。固定サイズの値を生成するには、ランダムなサイズの入力が必要です。これらの固定サイズの値は ハッシュ値と呼ばれ、 暗号関数 はハッシュ関数と呼ばれます。ハッシュには一貫性があり予測可能な性質があり、同じ入力から常に同じハッシュ値が生成されます。また、雪崩効果も示します。これは、入力のわずかな変更でもハッシュ値が大幅に異なる結果となり、高いセキュリティと不確実性が保証されることを意味します。

The Bcrypt Algorithm for Secure Password Hashing

ハッシュではソルトハッシュがよく使用されます。ソルトと呼ばれる一意のランダム文字列がハッシュの前に入力に追加され、同一の入力であっても各ハッシュが一意になります

ソルテッドハッシュは主にパスワードハッシュに使用されます。そのようなアルゴリズムの 1 つが 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 でエンコードされた Salt
  • 残りの文字は、Base64 でエンコードされたパスワードとソルトのハッシュです。

Python Bcrypt アルゴリズムの実装

必要な依存関係

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート