【Python】hashlibでハッシュ値の作成方法(sha256やmd5など)

本記事ではPythonでhashlibのモジュールを利用してハッシュ値を作成する方法について超わかりやすく紹介しています。Pythonは非常に人気なプログラミング言語です。そんなPythonのsha256やmd5などのハッシュ値の作成方法を一緒に学習しましょう!

本記事の目標

本記事は、hashlibを用いたhash値の生成方法を紹介しています。
実務レベルで利用できるレベルの高い安全性の暗号化を実現しています。

「ユーザー名」と「パスワード」からログインするアプリケーションなどで、
データベースに「ユーザー名」と「hash化したパスワード」を保存しておくことで、データベースを盗まれた際にでも悪用されないシステムになります。
本記事は「ユーザー名」と「hash化したパスワード」を保存できるようなコードを紹介しています。

実行環境は「python 3.8.8」です。

hashlibの基本的な使い方

下の6行目のように、与えられた「password」からHash値を生成することができます。
「.sha256」の部分を「md5」や「sha512」などに変更することで、hash関数を変更することができます。
今回は最も主流で安全性の高い「sha256」を利用ています。

import hashlib

name = 'tetoblog'
password = 'password'

value = hashlib.sha256(password.encode('utf-8')).hexdigest()
print(value)
【実行結果】
5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8

セキリュティの高いhashlibの使い方

hashlibには「pdkdf2_hmac」という非常に優秀なメソッドが用意されています。
これは、(hash関数, ハッシュ化したいパスワード, salt, hash化する回数)を引数に利用します。
それぞれの役割は下のような感じです。

hash関数は「sha256」「md5」などの種類を選びます
ハッシュ化したいパスワードはバイトデータに変更して引数に与えます
saltはパスワード加えるランダムなデータのことで、セキリュティを上げることができます
hash化する回数はhash化のhash化のhash化の… と複数hash化することでhash値をより複雑に解読困難にしています

import base64
import os
import hashlib

name = 'tetoblog'
password = 'password'
salt = base64.b64encode(os.urandom(32))

value = hashlib.pbkdf2_hmac(
    'sha256', password.encode('utf-8'), salt, 9800
)
print(value)
【実行結果】
b'\xbdj\xc8\x05\x00km3\xce1C$|jM1\xa4=\xbcp\xc5\xf3h\x17\xf0\xfc+\xc0\xeaT\x14\xd8'

サインイン、ログイン関数の作成

最後に、下のような関数を作成してみました。
hashlibを利用したセキリュティ強固なサインインとログイン関数です。

実行結果からデータベースにはhash値された解読不可能なパスワードが保存されており、login関数では正確にログインできることがわかります。

import base64
import os
import hashlib

database = {} #nameとpasswordを保存
salt = base64.b64encode(os.urandom(32))

def signin(name, password):
    value = hashlib.pbkdf2_hmac(
        'sha256', password.encode('utf-8'), salt, 9800
    )
    database[name] = value
    print(database)

def login(name, password):
    value = hashlib.pbkdf2_hmac(
        'sha256', password.encode('utf-8'), salt, 9800
    )
    if(value == database[name]):
        print('ログイン完了しました')
    else:
        print('nameとpasswordが一致しませんでした')

    return value == database[name]


if __name__ == "__main__":
    signin('tetoblog', 'password')
    login('tetoblog','password')
【実行結果】
{'tetoblog': b'\xd3\xe8[\xd9\xce\xa0\x0c\x97_\x96H\xd5\x0b\xf3\x9d\x11\x99\xeb\x7f\xd7k1\xaa\xa8\x892\xd4\xec\xaf\x04\xfd\x16'}
ログイン完了しました

ということで本記事はPythonでhashlibを用いたhash値の作成方法を紹介しました。
最後まで読んでいただきありがとうございました\(^o^)/

超オススメのPC用品

PCを操作する上で、トラックボールマウスが非常におすすめです!
僕も感動したこのマウスを、騙されたと思って使ってみてください!(^^)

外部モニターで2倍以上の効率化が見込めます!
安いものだと、たったの1万円前後なのでおすすめですよー!\(^o^)/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です