#はじめに
先日、こちらの記事を読んで、私もハッシュ化して67344549d15075a087a77f88e1ad920b21a387a9大臣のエゴサを凌駕したい!と考えpythonのハッシュ化について勉強してみました。
ですので、今回は勉強した内容を共有したいと思います。
#ハッシュ化の概要
・アルゴリズムによって文字列を規則性の見えない文字列に変換する。
(例)
ハッシュ化前:サンプル
↓
ハッシュ化後:b80f059f7c6301c6fb2a34615edca2634bc65fa6
・ハッシュ化のアルゴリズムは何種類も存在する。
・ハッシュ化によって生成された文字列をハッシュ値という。
・ハッシュ値から元の文字列を推定することは困難である。
つまり、「元データ→ハッシュ値」に変換するのは容易だけど「ハッシュ値→元データ」を推定するのは困難だよ〜ということです。
・規定のアルゴリズムにより生成されているため、何度同じデータをハッシュ化しても同じハッシュ値が生成される。
・元のデータが少し変わると生成されるハッシュ値は全く違うものになる。
といった特徴があります。
#hashlib対応アルゴリズムの確認
import hashlib
print(sorted(hashlib.algorithms_guaranteed))
#['blake2b', 'blake2s', 'md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', 'sha512', 'shake_128', 'shake_256']
print(sorted(hashlib.algorithms_available))
#['DSA', 'DSA-SHA', 'MD4', 'MD5', 'MDC2', 'RIPEMD160', 'SHA', 'SHA1', 'SHA224', 'SHA256', 'SHA384', 'SHA512', 'blake2b', 'blake2s', 'dsaEncryption', 'dsaWithSHA', 'ecdsa-with-SHA1', 'md4', 'md5', 'mdc2', 'ripemd160', 'sha', 'sha1', 'sha224', 'sha256', 'sha384', 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', 'sha512', 'shake_128', 'shake_256', 'whirlpool']
algorithms_guaranteed:「標準サポート」のハッシュ・アルゴリズムを表示します。
algorithms_available :「利用可能」なハッシュ・アルゴリズムを表示します。
#サンプルコード
今回は、三つ紹介します。
import hashlib
hash_before_word = '働きたくない'
# MD5
hash_after_word_md5 = hashlib.md5(hash_before_word.encode()).hexdigest()
print(hash_after_word_md5)
#450ba26c03d7740818d9b0f2bb97bc5
# blake2b
hash_after_word_blake2b = hashlib.blake2b(hash_before_word.encode()).hexdigest()
print(hash_after_word_blake2b)
#52e284d94dfdc8e88c2926f234907127e98738e03e96f21a510e4822e0891385154430de8c047a4c4868199aad8b8db093d3a995952d17c738e77cab7875acf9
# sha224
hash_after_word_sha224 = hashlib.sha224(hash_before_word.encode()).hexdigest()
print(hash_after_word_sha224)
このように複数のハッシュアルゴリズムによってハッシュ化できます。
他のハッシュアルゴリズムを使いたいときは、ハッシュアルゴリズム名を変更するだけです。
#まとめ
今回はpythonを使ったハッシュ化のアルゴリズムを紹介しました。
67344549d15075a087a77f88e1ad920b21a387a9大臣のエゴサ回避なり、パスワード管理なりご利用ください。(ただし、倫理は守りましょう)
いや〜、ffd4a94997286e73f1031aa7464b0d0cd1213bfdですね。