原作:Chihiキャプテン、ブログ:https://home.cnblogs.com/dongxixi/
インポート時 のインポートをBase64 インポートhashlibの クラスToken_hander(): DEF __init__ (セルフ、Out_timeまで): self.out_time = Out_timeを self.time = self.timer 峠 DEF タイマー(セルフ): 返すtime.timeを() DEF HAX(セルフ、STR ): 「」「 アルゴリズムの暗号化ダイジェスト :のparam STR:文字列、暗号化される リターン:暗号化された文字列 」「」 IF ません(文字列、バイトでisinstanceを): #代わりにタイプの入ってくるバイトであれば、強いタイプバイトに してみてください: STR =バイト(STR、エンコード= " UTF-8 " ) を除くBaseException EX AS: 昇給とValueError(" '%Sは'バイト型に変換することができない"%のSTR) MD5 = hashlib.md5() md5.update(「王カバーへタイガーerafe23 " .encode(エンコード= ' UTF-8 ' )) md5.update(STR) md5.update(" 992ksd上り坂トラDA 」 .encode(エンコーディング= ' UTF-8は' )) を返すMD5を。hexdigest() DEF build_token(セルフ、メッセージ): 「」 " hax_message:文字列のコンテンツフォーマット、暗号化される:『現在のタイムスタンプ:メッセージ:有効期限のタイムスタンプ』 :PARAMメッセージ:トークン文字列を生成する必要 :PARAM時間:有効期限 :リターン:トークン "" " hax_message = " %S:%S:%S "%(STR(self.time())、メッセージ、STR(self.time()+ self.out_time)) hax_res = self.hax(hax_message) トークン = base64.urlsafe_b64encode((" %S:%S "。%(hax_message、hax_res))符号化(エンコード= 'UTF-8 ' )) 戻りトークン。(デコード"UTF8 " ) デフcheck_token(自己、トークン): """ :のparamトークン:待检验的トークン :リターン:虚偽または新しいトークン ""」 してみてください: hax_res = base64.urlsafe_b64decode(token.encode(" UTF8 ") ).decode(" UTF-8 " ) message_list = hax_res.split(" :" ) MD5 = message_list.pop(-1 ) メッセージ = ' :' 。 (message_list)参加の場合 MD5!=self.hax(メッセージ): #は結果が合法でないトークンと一致しない場合は、コンテンツを暗号化し、暗号化された リターンFalseの 他に: IF self.time() -フロート(message_list.pop(-1))> 0:# のタイムアウトがFalseを返す リターンをFalseの 他: #の新しいトークンの成功のリターンを検証するためにトークン リターン((message_list.pop -1 self.build_tokenを)) を除いてBaseException AS EX: #異常なショーの検証が失敗したか、渡されたパラメータが正当でない リターン偽 IF __name__ == 「__main__ 」: token_hand = Token_hander(60 ) トークン = token_hand.build_token(' dxxx ' ) プリント(token_hand.check_token(トークン))