速手sig署名、python版、速手キーワード検索結果収集に使用

8018 ワード

多くの大物は高速sigパラメータの逆解読の過程を共有しています.私はただ大物の基礎の上でsig暗号化の一部のコードをpythonに変換しただけです.sig生成原理:url疑問符の後ろのパラメータをdictに変換し、form_dataパラメータは同じdictに置いてdictをソートし、ソートして文字列に変換しsaltを加え、最後にmd 5暗号化すればよい.
  • urlパラメータをdict
  • に変換
    def get_map_from_string(str):
        """
         url     dict
        :param str:
        :return:
        """
        map = {
         }
        str_list = str.split('&')
        for data in str_list:
            item = data.split('=')
            map[item[0]] = item[1]
        return map
    
  • urlパラメータdictとform_dataはdictに結合してソートし、文字列に変換し、塩
  • を加える.
    def get_url_str(map1,map2,salt = '382700b563f4'):
        """
         url   formdata    ,  ,     
        :param map1:url  dict
        :param map2:formdata  dict
        :param salt: ,  382700b563f4,       
        :return:
        """
        map = dict(map1,**map2)
        aps = sorted(map.items(), key = lambda d: d[0])
        data = {
         }
        for i in aps:
            if i[0] == 'sig' or i[0] == '__NS_sig3' or i[0] == '__NStokensig':
                pass
            else:
                data.update(dict({
         i[0]:i[1]}))
        url_str = ""
        for key,value in data.items():
            str = key + '=' + unquote(value)
            url_str += str
        return url_str + salt
    

    3 md 5暗号化
    def data_md5(content):
        m = hashlib.md5()
        m.update(content.encode("utf-8"))
        return m.hexdigest()
    
    def create_sig(query_str,post_arr):
        url_arr = get_map_from_string(query_str)
        str = get_url_str(url_arr, post_arr)
        return data_md5(str)
    

    urlの一部のパラメータは変わるのでsigも失効し、有効期間は2日を超えません.