一.密碼存儲(chǔ)的主要形式:
- 明文存儲(chǔ):肉眼就可以識(shí)別洋满,沒(méi)有任何安全性鄙漏。
- 加密存儲(chǔ):通過(guò)一定的變換形式恃轩,使得密碼原文不易被識(shí)別脆侮。
二.密碼加密的幾類方式:
- 明文轉(zhuǎn)碼加密:BASE64, 7BIT等瞎领,這種方式只是個(gè)障眼法泌辫,不是真正的加密。
- 對(duì)稱算法加密:DES, RSA等默刚。
- 簽名算法加密:也可以理解為單向哈希加密甥郑,比如MD5, SHA1等。加密算法固定荤西,容
易被暴力破解澜搅。如果密碼相同,得到的哈希值是一樣的邪锌。 - 加鹽哈希加密:加密時(shí)混入一段“隨機(jī)”字符串(鹽值)再進(jìn)行哈希加密勉躺。即使密碼相同,如果鹽值不同觅丰,那么哈希值也是不一樣的《Γ現(xiàn)在網(wǎng)站開(kāi)發(fā)中主要是運(yùn)用這種加密方法。
三.在flask中使用加鹽哈希加密
1. 密碼生成函數(shù):generate_password_hash
(1) 函數(shù)定義:
werkzeug.security.generate_password_hash(password, method='pbkdf2:sha1', salt_length=8)
(2) 參數(shù)說(shuō)明:
- password: 明文密碼
- method: 哈希的方式(需要是hashlib庫(kù)支持的),一般為SHA1妇萄,格式為:
pbpdf2:<method>[:iterations]
- iterations:(可選參數(shù))迭代次數(shù)蜕企,默認(rèn)為1000。
- slat_length: 鹽值的長(zhǎng)度冠句,默認(rèn)為8
(3) 密碼生成示例:
from werkzeug.security import generate_password_hash
print(generate_password_hash('123456'))
123456
=> pbkdf2:sha256:150000$zXTrdDnY$0881f97a0c769a1610161bec95a80c7869212a1dc09d005880cdb35392610364
2.密碼驗(yàn)證函數(shù):check_password_hash
(1) 函數(shù)定義:
werkzeug.security.check_password_hash(pwhash, password)
(2) 參數(shù)說(shuō)明:
- pwhash: generate_password_hash生成的哈希字符串
- password: 需要驗(yàn)證的明文密碼
(3) 密碼生成示例:
from werkzeug.security import check_password_hash
pwdhash = 'pbkdf2:sha1:1000$X97hPa3g$252c0cca000c3674b8ef7a2b8ecd409695aac370'
print(check_password_hash(pwdhash, '123456'))
pbkdf2:sha256:150000$zXTrdDnY$0881f97a0c769a1610161bec95a80c7869212a1dc09d005880cdb35392610364
=> 123456
一般來(lái)說(shuō)轻掩,默認(rèn)的加密強(qiáng)度已經(jīng)足夠了,如果需
要更復(fù)雜的密碼懦底,可以加大鹽值長(zhǎng)度和迭代次數(shù)唇牧。