hashlibモジュールとhmacモジュール

2131 ワード

いくつかの考え
今日、tcpプロトコルのクライアントの正当性を検証する方法を学びました.サーバー側を設立した以上、どのクライアントにも簡単に接続させたくないなら、必ず検証をしなければなりません.両者の検証の一致性の内容に関連しています.今日学んだhmacモジュールはこの問題を解決しました.hmacモジュールはhashlibモジュールと非常に似た使用方法を持っています.だからいっそついでに復習しました.
hashlibモジュール
hashlibモジュールを理解するには、まず要約アルゴリズムを理解する必要があります.
要約アルゴリズムとは?要約アルゴリズムはハッシュアルゴリズム、ハッシュアルゴリズムとも呼ばれる.任意の長さのデータを1つの関数で固定された長さのデータ列に変換します(通常は16進数の文字列で表されます).
hashlibモジュールは要約アルゴリズムを提供します.一般的なアルゴリズムにはmd 5,sha 1も含まれている.しかし、要約アルゴリズムには、暗号化のみで復号できないため、データの暗号化操作には使用できないという明らかな特性があります.しかし、同じデータに対して計算され、結果は常に同じであるため、hashlibは一貫性を検証するシーンによく適用されます.例えば、ユーザー登録システムでは、ユーザー名とパスワードを保存する必要があるが、パスワードをhashlibモジュールの暗号化すると、データが漏洩しても暗号文は解読されず、得られた文字列はユーザー登録時にのみ適用され、パスワード暗号化後の暗号文がデータライブラリ内と同じであれば、自然に検証が完了する.hashlibモジュールの応用も便利で、md 5を例に挙げます.
import hashlib
db = {
    'michael': 'e10adc3949ba59abbe56e057f20f883e',
    'bob': '878ef96e86145580c38c87f0410ad153',
    'alice': '99b1c2188db85afee403b1536010c2c9'
}
def login(user, password):
    md=hashlib.md5()
    if user in db:
        md.update(password.encode('utf-8'))
        info=md.hexdigest()
        if info == db[user]:
            print('    ')
        else:
            print('    ')
    else:
        print('      ')
login('michael', '123456')
login('bob', 'abc999')
login('alice', 'alice2008')

もちろん、上は単純な暗号化アルゴリズムにすぎません.生活の中で私たちが見た暗号化はこのような簡単な方法で暗号化することはできません.この暗号化アルゴリズムには明らかな欠点があり、ライブラリに衝突しやすいからです.暗号化は一方向のプロセスであり、解読されることはありませんが、他の人が大量のデータを持って暗号化操作を行うと、得られた暗号文とあなたの暗号文の対比が得られ、同じようにすれば、あなたの暗号も暴露されます.だからhashlibモジュールには、自分のデータをより安全にするために塩を加える操作もあります.
md5=hashlib. md5(salt.encode('utf-8'))

この基礎の上に動的に塩を加えるなどの操作があり、より安全を追求している.
hmacモジュール
hamcモジュールは,我々の塩添加アルゴリズムに基づいてpythonバンドの暗号化アルゴリズムと言える.このアルゴリズムを適用するには、まずsecret_を提供します.key
import hmac#   hashlib  
secret_key=b'hmac'
h=hmac.new(key, message, digestmod='MD5')#secret_key,    ,            
h.digest()#    
hmac.compare_digest()#         ,     

このようにして生じた密文もより安全だ.