Pythonとテストトークンはダイジェストアルゴリズムでトークンを生成します


原作: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(トークン))

 

おすすめ

転載: www.cnblogs.com/dongxixi/p/11139386.html