概要
- たまにパスワードをそのまま(平文で)DBに保存しているという話を聞く。
- Pythonの標準モジュールに文字列をハッシュ化できるモジュール
hashlib
があったので使ってみた。
ハッシュ化とは
- あるアルゴリズムによって文字列を規則性の見えない文字列に変換する。
- ハッシュ化のアルゴリズムは数種類ある。
- ハッシュ化によって生成された文字列をハッシュ値という。
- ハッシュ値から元の文字列を生成することは難しい。
- パスワードの管理などに利用される。
- 逆にパスワードをそのまま保存するようなウェブサイトは安全性に疑問があるし、万が一情報が流出したら他人のアカウントで容易にログインでき、個人情報の抜き取りや他人のクレジットカードを使った買い物などが発生してしまう。
- 一見規則性が見えないが、実際は規定のアルゴリズムにより生成されているので、何度やっても同じハッシュ値が生成される。
サンプル
- MD5、SHA256、SHA512の3種類のハッシュ化アルゴリズムを使ってみた。
- 大文字、小文字の判定も可能。
sample.py
# coding: utf-8
import hashlib
password = "PassWord12345"
>>> hashlib.md5(password).hexdigest()
9d314e160c006e4bddf054c516f110aa
>>> hashlib.sha256(password).hexdigest()
ed05e0bd8cd4c4d8d294522246e93705e0718fb56f9341c299f15841762d427c
>>> hashlib.sha512(password).hexdigest()
f1bea6640f6ad962db83b1413410f08d29d2c0579449e286e47293633718dc2a21b54d649da47a30e31fc11953a7cfffa8ce2ed20451eae3ba023b5e1773e800