python--Flask學習(七)--利用Flask中的werkzeug.security模塊加密

若將密碼以明文的方式保存在數據庫中是不安全的,可以使用一些如MD5的方式加密,但像這種加密方式也是存在安全隱患的,這裏我們來學習一下利用Flask中的werkzeug.security模塊加密
1、這種加密方式的原理:加密時混入一段“隨機”字符串(鹽值)再進行哈希加密。即使
密碼相同,如果鹽值不同,那麼哈希值也是不一樣的。現在網站開發中主要是運
用這種加密方法。
2、這個模塊主要是用到了兩個函數:

  • 密碼生成函數:generate_password_hash;
  • 密碼驗證函數:check_password_hash;

3、密碼生成函數:generate_password_hash
(1)函數定義

werkzeug.security.generate_password_hash(password, method='pbkdf2:sha1', salt_length=8)

參數說明:

  • password: 明文密碼;
  • method:哈希加密的方法(需要hashlib庫支持的),格式爲pdpdf2:[:iterations];
    method:哈希的方式,一般爲SHA1;
    iterations:(可選參數)迭代次數,默認爲1000;

-slat_length: 鹽值的長度,默認爲8。
(2)密碼生成示例:

from werkzeug.security import  generate_password_hash,check_password_hash
print (generate_password_hash('123456'))
print (generate_password_hash('123456'))

輸出:

pbkdf2:sha1:1000$0yy56h3w$ae1030bd575e95a1b7066120d6b2381ae01f678d
pbkdf2:sha1:1000$Roji1qH7$c6867df485c8c9ff094025e1bf779cbf570dcbf1

因爲鹽值是隨機的,所以就算是相同的密碼,生成的哈希值也不會是一樣的。
4、碼驗證函數:check_password_hash
(1)函數定義

werkzeug.security.check_password_hash(pwhash, password)

參數說明:

  • pwhash:generate_password_hash生成的哈希字符串(即加密後的密碼);
  • password:需要驗證的明文密碼;

check_password_hash函數用於驗證經過generate_password_hash哈希的密碼,若密碼匹配,則返回真,否則返回假。
(2)密碼驗證示例:

from werkzeug.security import  generate_password_hash,check_password_hash

pwhash = "pbkdf2:sha1:1000$Roji1qH7$c6867df485c8c9ff094025e1bf779cbf570dcbf1"
print (check_password_hash(pwhash,'123456'))

輸出:True

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章