HMACモジュール:
二つの重要な機能が同じである比較:
インポートHMAC インポートOS MSG = os.urandom(32) #は、32ビットのランダムなバイトコード生成 DEF :WDC() キー = B ' WDC ' #のキー RET = hmac.new(キー、MSG) #1 バイトコードとキーは、オブジェクトRETを作成するために、暗号化されている(バイトは両方のタイプがなければなりません) ダイジェスト= ret.digest() #消化 リターンダイジェスト #の暗号文返さ消費 DEF YHFを(): キー1 = B ' WDC ' #キー RET1 = HMAC。新新(KEY1、MSG) #のバイトコードとキー1、暗号化(タイプは、両方のバイトがしなければならない)、オブジェクトRET1を作成します。 = ret1.digest digest1() #消化 戻り digest1の #暗号文の消費後に返さ WDC = WDC() YHF = YHF() の結果 = hmac.compare_digest(WDC、YHF) #は比較2暗号文である一貫したリターンファレス/真 印刷(結果)#出力
クライアントの正当性を確認します。
サーバー:
インポートOS インポートHMAC インポートソケット SECRET_KEY = B ' WDC ' #のキー:バイナリコード化されなければならない SK = socket.socket() sk.bind((' 127.0.0.1 '、8080 )) sk.listen() DEF check_conn(コネティカット): MSG = os.urandom(32) #は、ランダム32ビットコードを生成する入力バイト conn.sendを(MSG) #32バイトのランダムコード送信 H = hmac.new(SECRET_KEY、MSG) #のキーと生成されたランダムバイト生成された暗号化コードは、ターゲットと一致する ダイジェスト= h.digest() #生成された暗号文を消化しました = conn.recv client_digest(1024) #メッセージを受信(クライアントが暗号文を生成した) 戻り hmac.compare_digest(ダイジェスト、client_digest) #サービスを比較すると、クライアントは、暗号文が一致している受信 コネティカット、ADDR = sk.accept() RES = check_conn(コネチカット州) IF RES: 印刷(' 正当なクライアント' ) はconn.close() 他: 印刷(' なし正当なクライアント' ) はconn.close() sk.close()
クライアント:
インポートHMAC インポートソケット SECRET_KEY = B ' WDC ' #のキー:バイナリコード化されなければならない SK = socket.socket() sk.connect((' 127.0.0.1 '、8080 )) MSG = sk.recv(1024) #受信情報(生成された32ビット・コード・バイトを受信するために) H = hmac.new(SECRET_KEY、MSG) #のキーとランダムバイト生成された暗号化コードを生成する対象と一致する ダイジェストh.digest =() #は、農産物の暗号文消化 SKを。送信(ダイジェスト) #は、生成した暗号文の送信 )(sk.closeを