# Flask實作_ext_07_Flask-Bcrypt_密碼加密 ###### tags: `flask` `flask_ext` `python` `Bcrypt` :::danger 官方文件: * [Flask-Bcrypt](https://flask-bcrypt.readthedocs.io/en/latest/) * [Flask-Bcrypt_簡中翻譯](http://flask-bcrypt-docs-zh.readthedocs.io/zh/latest/) ::: ## 說明 在資料庫中保存任何的密碼都不該是明碼,否則當資料庫被駭客攻陷之後造成的個資損失是難以計算的,尤其現行各國法令對個資的保護已愈來愈嚴謹,不得不防。 如果你看一下`flask-bcrypt`的原始碼會發現它的底層是`werkzeug`跟`bcrypt`,有翻過`Flask-Web開發`的人就會想起來,`Miguel Grinberg`在說明加密的時候就是直接利用`werkzeug`來實作的。  不過密碼學非個人所專,所以就只能直接看應用了。 ## 安裝 ```python= pip install flask-bcrypt ``` ## 範例 利用實作過程中產生的`manager.py`來測試,如下: ```python from app_blog import app from flask_script import Manager, Command, prompt_bool, Shell manager = Manager(app) @manager.shell def _make_context(): return dict(app=app, db=db) manager.add_command("shell", Shell(make_context=_make_context)) if __name__ == "__main__": manager.run() ``` 接著,在Command中執行命令,如下: ```shell= (venv) D:\proPycharm\app_blog>python manager.py shell >>> from flask_bcrypt import Bcrypt >>> bcrypt=Bcrypt(app) ``` 第1行:執行`shell`指令,單純為了得到`app`,其實你也可以自己弄一個簡單專案去按標準流程掛就可以了。 第3行:初始化`flask-bcrypt` 利用`dir`來查詢`bcrypt`的method清單,如下: ```shell= >>> dir(bcrypt) [...上略...'check_password_hash', 'generate_password_hash', 'init_app'] ``` 透過`dir`指令可以發現在實作`Bcrypt`之後,包含了三個method,`init_app`用於工廠模式調用供其初始化,其它兩個就是加密(`generate_password_hash`)、驗證(`check_password_hash`),命名非常直觀。 ### 加密 ```python= >>> p_hash = bcrypt.generate_password_hash('haha').decode('utf-8') >>> p_hash '$2b$12$uawDwD/ynN/Nmo2jseEHcuBpHQWwze/0t40etu/EHJK9uxkr7Tewm' ``` ### 驗證 ```python= >>> bcrypt.check_password_hash(p_hash, 'haha') True ``` ## 總結 利用`flask-bcrypt`來針對密碼做加密與驗證非常直觀與便利,唯一注意的是, 官方文件提到,在python3中使用`generate_password_hash`的時候要加上`decode('utf-8')`,接下來就可以試著將這個功能加入我們的實作專案了。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up