雜湊是一種無法逆轉的加密函數。它需要隨機大小的輸入來產生固定大小的值。這些固定大小的值稱為雜湊值, 加密函數稱為雜湊函數。雜湊具有一致和可預測的性質,這意味著相同的輸入將始終產生相同的雜湊值。它也表現出雪崩效應,這意味著即使輸入的微小變化也會導致雜湊值截然不同,從而確保高安全性和不確定性。
散列通常採用加鹽散列,其中在散列之前將稱為鹽的唯一隨機字串添加到輸入中,即使對於相同的輸入,每個散列也是唯一的
加鹽雜湊主要用於密碼雜湊。其中一個演算法是bcrypt 演算法。
Bcrypt 演算法是基於 Blowfish 加密演算法。 bcrypt 為每個密碼產生唯一的 salt(隨機字串),然後將 salt 與密碼組合後再進行雜湊處理。這使得 Bcrypt 能夠抵抗暴力攻擊。
生成鹽:
Bcrypt 產生一個 16 位元組長的隨機鹽,通常採用 Base64 格式。
對給定字串進行雜湊處理:
鹽與密碼組合,產生的字串透過 Blowfish 加密演算法傳遞。 bcrypt 應用由工作因子定義的多輪雜湊。高輪數使其計算成本高昂,從而增強了其對暴力攻擊的抵抗力。
工作因子,也稱為成本,由對數值 2 定義。如果成本為 12,則意味著 2^12 輪。成本係數越高,產生雜湊所需的時間就越長,這反過來又使攻擊者更難暴力破解密碼。
Bcrypt 雜湊的格式和長度:
y$odwBFokG9vTK/BAaRXKKl.9Q8KHXHeYSqpLi/gSNpmzSwQcaJb.gS
給定的字串包含:
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中文網其他相關文章!