Python学習-hashlib
Pythonのhashlibは一般的な要約アルゴリズムを提供し,主にSHA 1,SHA 224,SHA 256,SHA 384,SHA 512,MD 5アルゴリズムを提供する.
要約アルゴリズムはハッシュアルゴリズム、ハッシュアルゴリズムとも呼ばれる.任意の長さのデータを1つの関数で固定された長さのデータ列に変換します(通常は16進数の文字列で表されます).
一般的な要約アルゴリズムMD 5を例にとると、文字列のMD 5値が計算されます.
データ量が大きい場合は、update()をブロック化して複数回呼び出すことができ、最後に計算された結果は同じです.
アルファベットを変更して、計算の結果が全く異なるかどうかを見てみましょう.
MD 5は最も一般的な要約アルゴリズムであり、速度が速く、生成結果は固定128 bitバイトであり、通常32ビットの16進文字列で表される.もう1つの一般的な要約アルゴリズムはSHA 1であり、SHA 1の呼び出しとMD 5の呼び出しは完全に類似している.
SHA 1の結果は160 bitバイトであり、通常は40ビットの16進文字列で表される.
SHA 1よりも安全なアルゴリズムはSHA 256とSHA 512であるが、安全なアルゴリズムほど遅いだけでなく、要約長も長い.
以上の暗号化アルゴリズムは依然として非常に強いが,衝突ライブラリによって逆解できるという欠陥がある.したがって,暗号化アルゴリズムにカスタムキーを追加して暗号化する必要がある.
要約アルゴリズムの適用
ユーザーがログインできるWebサイトには、ユーザーがログインしたユーザー名とパスワードが格納されます.ユーザー名とパスワードの保存方法データベース・テーブルに保存する方法は、次のとおりです.
明文でユーザーパスワードを保存し、データベースが漏洩した場合、すべてのユーザーのパスワードは***の手に落ちる.パスワードを正しく保存する方法は、ユーザーの明文パスワードを保存するのではなく、MD 5などのユーザーパスワードの要約を保存することです.
ユーザーがログインすると、まずユーザーが入力した明文パスワードのMD 5を計算し、次にデータベースに格納されているMD 5と比較し、一致する場合はパスワードの入力が正しいことを示し、一致しない場合はパスワードがエラーを肯定する.
要約アルゴリズムはハッシュアルゴリズム、ハッシュアルゴリズムとも呼ばれる.任意の長さのデータを1つの関数で固定された長さのデータ列に変換します(通常は16進数の文字列で表されます).
一般的な要約アルゴリズムMD 5を例にとると、文字列のMD 5値が計算されます.
import hashlib
MD5 = hashlib.md5()
MD5.update(bytes('how to use md5 in python hashlib?',encoding='utf-8'))
print(MD5.hexdigest())
d26a53750bc40b38b65a520292f69306
データ量が大きい場合は、update()をブロック化して複数回呼び出すことができ、最後に計算された結果は同じです.
import hashlib
MD5 = hashlib.md5()
MD5.update(bytes('how to use md5 in ',encoding='utf-8'))
MD5.update(bytes('python hashlib?',encoding'utf-8'))
print(MD5.hexdigest())
アルファベットを変更して、計算の結果が全く異なるかどうかを見てみましょう.
MD 5は最も一般的な要約アルゴリズムであり、速度が速く、生成結果は固定128 bitバイトであり、通常32ビットの16進文字列で表される.もう1つの一般的な要約アルゴリズムはSHA 1であり、SHA 1の呼び出しとMD 5の呼び出しは完全に類似している.
import hashlib
SHA1 = hashlib.sha1()
SHA1.update(bytes('how to use sha1 in ',encoding='utf-8'))
SHA1.update(bytes('python hashlib?',encoding='utf-8'))
print(SHA1.hexdigest())
SHA 1の結果は160 bitバイトであり、通常は40ビットの16進文字列で表される.
SHA 1よりも安全なアルゴリズムはSHA 256とSHA 512であるが、安全なアルゴリズムほど遅いだけでなく、要約長も長い.
以上の暗号化アルゴリズムは依然として非常に強いが,衝突ライブラリによって逆解できるという欠陥がある.したがって,暗号化アルゴリズムにカスタムキーを追加して暗号化する必要がある.
import hashlib
hash = hashlib.md5(bytes('898oaFs09f',encoding="utf-8"))
hash.update(bytes('admin',encoding="utf-8"))
print(hash.hexdigest())
要約アルゴリズムの適用
ユーザーがログインできるWebサイトには、ユーザーがログインしたユーザー名とパスワードが格納されます.ユーザー名とパスワードの保存方法データベース・テーブルに保存する方法は、次のとおりです.
name | password
--------+----------
michael | asddasda
lzj | ddecewad
erics | se232cw3
明文でユーザーパスワードを保存し、データベースが漏洩した場合、すべてのユーザーのパスワードは***の手に落ちる.パスワードを正しく保存する方法は、ユーザーの明文パスワードを保存するのではなく、MD 5などのユーザーパスワードの要約を保存することです.
username | password
---------+---------------------------------
michael | e10adc3949ba59abbe56e057f20f883e
lzj | 878ef96e86145580c38c87f0410ad153
erics | 99b1c2188db85afee403b1536010c2c9
ユーザーがログインすると、まずユーザーが入力した明文パスワードのMD 5を計算し、次にデータベースに格納されているMD 5と比較し、一致する場合はパスワードの入力が正しいことを示し、一致しない場合はパスワードがエラーを肯定する.