アルゴリズムの説明:
Pythonのhashlibは、このようなようにMD5、SHA1、およびなど、一般的なダイジェストアルゴリズムを提供します。
ダイジェストアルゴリズムそれは何ですか?ダイジェストアルゴリズムは、また、ハッシュアルゴリズム、ハッシュアルゴリズムとして知られています。これは、(典型的には16進数の文字列で表される)固定長データ列の任意の長さのデータを変換する機能を介するものです。
ダイジェストアルゴリズムによってダイジェストは、任意の長さのデータDATA固定長算出要約元のデータが改ざんされたかどうかを発見するために、ダイジェストの関数f()です。
ダイジェストアルゴリズムは、(データを)、関数は一方向関数であるダイジェストFを算出するので、容易で、データが改ざんされたかどうかを示すことができるが、逆推力によってデータを消化することは非常に困難です。また、オリジナルデータへの変更のビットを行う、完全に異なるダイジェスト計算につながります。
hashlib:ダイジェストアルゴリズム
全体の概要
塩の概要
ダイナミックな塩の概要
#一般的な要約 インポートhashlib MD = hashlib.md5() #MDオブジェクトにダイジェストを得る md.update(B 「1234 」) #1 バイトの抽象着信ストリングを必要と更新方法は、入力する必要があり #1 (md.updateをバイト(パスワード、エンコード=「UTF -8」))#password 動的文字列は、同じタイプ、バイトに変換する必要がコードキャラクタを指定 RET = md.hexdigest #方法のhexdigest hashlibを、ダイジェスト値のポイントが存在しますメモリアドレス RET = md.hexdigest() #プラス()ダイジェスト値取得 位データが大きい場合、ブロックは複数回更新()を呼び出すことができ、結果は最後に計算と同じである: MD5 = hashlib.md5 () MD = hashlib.md5() md5.update(' どのようにMD5で使用します' ) md5.update(' Pythonのhashlib?' ) md.update(' PythonのhashlibにMD5を使用する方法?' ) プリント(md5.hexdigest()) プリント(md.hexdigest()) #打印: d26a53750bc40b38b65a520292f69306 d26a53750bc40b38b65a520292f69306
注意:
MD5は、アルゴリズムに属するクラスhashlibモジュールです。そこSHA224の、SHA1アルゴリズム。
更新は、着信抽象パラメータを要求するための方法のアルゴリズムに属します。
hexdigestは hashlibは、ダイジェスト値を取得するための方法です。
大量のデータが、ブロックが複数回更新()を呼び出すことができる場合、結果は、最後に計算と同じです
塩要約:
hashlib.md5(塩)
hashlib.md5 = MD(B ' エイキ')#のB、デフォルトはASCIIコードで、中国をサポートしていません MD1 = hashlib.md5(バイト(' アイク'、エンコード= ' UTF-を。8 ')) #中国の必要性は仕方バイトコーディング現像 md.update(B ' 1234 ' ) md1.update(B ' 1234 ' ) RET = md.hexdigest() RET1 = md1.hexdigest() プリント(RET) プリント(RET1)を
ダイナミックな塩:
INPUT = USR(' 自分のユーザー名を入力してください' ) MD = hashlib.md5(B ' エイキ')#のB、デフォルトはASCIIコードでは、中国をサポートしていません MD1 = hashlib.md5(バイト(' アイク'、エンコーディング= " UTFを-8 ')+バイト(USR、エンコーディング= ' UTF-8 ')) #塩の動的パラメータ受信 md.updateを(B ' 1234 ' ) md1.update(B ' 1234 ' ) RET = md.hexdigest( ) RET1 = md1.hexdigest() 印刷(RET) 印刷(RET1)
アプリケーション:ユーザー名とパスワードは、ユーザーのログインに保存されています
#登録 DEFの情報(): 試してみる: info_usr = 真 のwhile info_usr: F =オープン(' のuser_data '、' + '、エンコーディング= 'UTF-8 ')#フォームで f.seek(0) #ファイルA +フォームを開きます、あなたは、ファイルの内容をトラバース開始位置にカーソルを移動したい場合のためのラインにF: ユーザ名 =入力(「自分のユーザー名を入力してください:」) パスワード =入力(" あなたのパスワードを入力してください。 ' ) Usrの、PWD = line.split(' | ' ) IF usr.strip()== username.strip(): 印刷(' アカウントが登録されている、再入力してください" ) それ以外: MD5 = hashlib.md5() md5.update(バイト(パスワード、エンコード = ' UTF-8。' )) info_password = md5.hexdigest() f.write(ユーザー名 + ' | ' ) f.write(' N- \%のS '%のinfo_password) info_usr = Falseの f.close() を除くとValueError: #ファイルスローを閉じた後は、成功の登録を求めるメッセージが表示 印刷(' 登録が成功' ) #のログイン DEF ロンジンを(): I = 3 しばらく I> 0: I - = 1。 オープン(と' user_dataの' F AS): ユーザ名 =入力(' ユーザ名を入力します。' ) パスワード = INPUT(' パスワードを入力します。' ) のためのラインでF: MD5 = hashlib.md5() (バイト(パスワード、エンコーディングmd5.update = 'UTF-8 ' )) info_password = md5.hexdigest() USR、PWD line.strip =()スプリット(' | ' ) IF usr.strip()==ユーザ名と pwd.strip()== info_password: 印刷(' ログイン成功') BREAK 他: 印刷(「ログインに失敗しました、再度ログインしてください、だけでなく、チャンスを%s 」%I) 他: 印刷(「アカウントがロックされている」) #のテスト LIS = [ 「ログイン」、 「登録」 ] のための私では列挙(LIS): 印刷(I) 中に真: 試してみる: SELECT = INT(入力(「選択番号を入力するか、ユーザ登録してください。")) IF SELECTの== 0: ロンジン() BREAK のelif SELECT 1 ==。 : インフォ() BREAK 他に: 印刷(" 正しいシリアル番号を入力してください" ) を除く例外: 印刷(" 正しいシリアル番号を入力してください" ) の知識ポイント:hashlibの 例外処理 ファイルの読み込みと書き込みの バグを:ファイルアクセスのアカウント名とパスワードとして、ユーザ名とパスワードのみの最後の行を確認することができますので