在確認用戶或執行類似操作時,您絕不能以明文形式保存密碼。
由於許多人使用相同的密碼,如果攻擊者發現未加密密碼的數據庫,它們可以很容易地與匹配的電子郵件一起使用以進入鏈接的網站或帳戶,甚至用於嘗試訪問其他帳戶。
今天,當提供密碼時,密碼通常會被散列。 建議使用鹽進行散列,並將鹽與散列密碼放在一起。
加鹽可能看起來像是薯餅配方中的步驟之一,但在密碼學中,它指的是向哈希函數的輸入添加隨機數據,以確保即使輸入相同,哈希也將始終提供唯一的結果。
因此,通過添加鹽創建的獨特哈希可以保護我們免受多種攻擊方法的影響,包括哈希表攻擊,同時扼殺字典和暴力離線嘗試。
在這裡,借助代碼片段,我們將演示如何使用“bcrypt”來保護您的密碼。
那麼,什麼是“bcrypt”?
Bcrypt 是一個支持多種語言並提供特殊密碼加密的哈希庫。 為了提高密碼的安全性,它會在加密字符串時自動產生額外的隨機字符(鹽)。
您還可以選擇定義要添加到傳入字符串的附加字符數。
bcrypt 庫只讀取字節碼,而不是原始字符串。 因此,在將傳入的密碼字符串提交給 bcrypt 進行加密之前,您必須先對其進行編碼。
加密和編碼不是一回事。 它只是確保字符串在被加密技術覆蓋之前是機器可讀的。
在 Python 中使用 bcrypt 加密密碼
Python 使 bcrypt 密碼加密變得簡單。 我們將專注於在沒有框架幫助的情況下執行此操作。 但是不用擔心,如果您了解如何保存用戶輸入並從數據庫中讀取它們,那麼框架中的過程是相同的。
安裝過程
您只需要設置一個 Python 虛擬環境,然後使用像 PyCharm 這樣的 IDE。 然後必須首先安裝該庫:
加密密碼
讓我們看看安裝後如何使用 bcrypt 加密文本:
上述 Python 代碼執行並輸出一個加密的字節串。 但是每次運行腳本時,結果都不同。 Bcrypt 使用這種方法來確保每個用戶都有一個專門加密的密碼。
順便說一句,那是用於密碼加密。
使用 Bcrypt 進行密碼比較和確認
如果您希望保存散列密碼並稍後檢查它是否與用戶提交用於身份驗證的密碼匹配,會發生什麼情況?
這很簡單。 只有驗證密碼必須與數據庫的條目(或在本例中的內存中)進行比較。
在與數據庫中的密碼進行比較之前,還必須對身份驗證密碼進行編碼,因為 bcrypt 只能讀取字節字符串。 基本上,您會將編碼的身份驗證輸入與您當前在數據庫中的編碼散列密碼進行比較。
讓我們使用虛構的 Python 輸入來測試一下:
運行上述代碼後,系統會提示您輸入新密碼。 這是由 Python 保存在內存中的。 然後,在身份驗證部分,您將輸入相同的密碼,該密碼對您來說是私有的。
如果將密碼與之前加密並保存的密碼進行比較,Python 會發出一條成功消息。
如果不是,則打印出錯誤消息,然後添加 else 語句。
基本思想與註冊然後向數據庫提供密碼以進行身份驗證的思想相同。
結論
儘管我們只是簡單地使用加密密碼來展示 bcrypt 如何在純 Python 短內存中發揮作用,但它的實際適用性在於基於用戶的應用程序。
儘管如此,本文演示了組織代碼以實現此目的的基本方法,即使在現實環境中也是如此。
例如,如果您使用 Flask,您可以通過單獨的 Web 表單而不是輸入來提供註冊和身份驗證字段。
當然,在比較密碼時,您將從包含保存在現實世界中的加密密碼的數據庫中讀取。
喬納·尼奇
謝謝你這個簡單又簡單的解釋,
這對我目前的專案幫助很大。
我認為範例程式碼僅限於最低限度並且不像許多其他解釋那樣過載,這是非常好的。
最好的問候