LoginSignup
4
3

More than 5 years have passed since last update.

標準ライブラリのhashlibでハッシュ化してログインのパスワードを比べる

Posted at

Pythonの標準ライブラリにはハッシュ化を簡単にできるライブラリがあるらしいので使ってみた

test1.py
# -*- coding: utf-8 -*-

import hashlib

if __name__ == "__main__":

    # hashオブジェクトの作成
    md5 = hashlib.md5()

    # 文字列のセット
    md5.update("password")

    print md5.digest()
    print md5.hexdigest()
test1.pyの出力結果
_Mフ;Zァeヨ・゙クぱ
5f4dcc3b5aa765d61d8327deb882cf99

import hashlibとかいてimportする。
1.使用したいアルゴリズムに合わせてオブジェクトを作成する(今回はmd5を使用)
2.作成したオブジェクトにハッシュ化したい文字列をセットする
3..hexdigestでハッシュ化する(.digestはよくわからない)

ハッシュ化したら元の文字列を知ることはできないそうです。
なので、パスワードがほかの人に知られることはない!!

元のパスワードと入力されたパスワードが一致しているか調べる

入力されたパスワードもハッシュ化して、比べればいい。

hash_test.py
# -*- coding: utf-8 -*-

import hashlib
import sys

def createHash(password):

    # ハッシュオブジェクトの作成
    hashObj = hashlib.md5()

    # ハッシュ化する文字列を指定
    hashObj.update(password)

    # ハッシュ化したものを返す
    return hashObj.hexdigest()


if __name__ == "__main__":

    # 元のパスワードをハッシュ化
    checkPass = createHash("password")

    # コマンドライン引数を取得
    password = sys.argv[1]

    # ハッシュ化
    password = createHash(password)

    # 入力されたパスワードが一致しているか
    if checkPass == password:
        print u"ログイン成功"
    else:
        print u"ログイン失敗"
hash_test.pyの実行結果
\python>hash_test.py pass
ログイン失敗

\python>hash_test.py password
ログイン成功

\python>hash_test.py Password
ログイン失敗

大文字・小文字も区別しているらしい(当然といえば当然か...)

参考文献

ドキュメント
ハッシュ化について

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3