最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于python實(shí)現(xiàn)數(shù)組格式參數(shù)加密計(jì)算

 更新時(shí)間:2020年04月21日 16:07:21   作者:wan了個(gè)蛋  
這篇文章主要介紹了基于python實(shí)現(xiàn)數(shù)組格式參數(shù)加密計(jì)算,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

代碼示例

#輸入
'''order_id:31489
join_course[0][join_tel]:13130999882
join_course[0][join_name]:任學(xué)雨
join_course[0][join_card_afterfour]:043X
join_course[0][join_school]:銘博教育咨詢
join_course[1][join_tel]:13130999883
join_course[1][join_name]:任學(xué)雨
join_course[1][join_card_afterfour]:043X
join_course[1][join_school]:銘博教育咨詢
join_course[2][join_tel]:13130999884
join_course[2][join_name]:任學(xué)雨
join_course[2][join_card_afterfour]:043X
join_course[2][join_school]:銘博教育咨詢
join_course[3][join_tel]:13130999885
join_course[3][join_name]:任學(xué)雨
join_course[3][join_card_afterfour]:043X
join_course[3][join_school]:銘博教育咨詢
timestamp:1574921552698
sign:8936b324e417b31d97f0c3e9a904dssss3'''
#輸出
join_course[{"join_tel":"13130999882","join_name":"任學(xué)雨","join_card_afterfour":"043X","join_school":"銘博教育咨詢"},{"join_tel":"13130999883","join_name":"任學(xué)雨","join_card_afterfour":"043X","join_school":"銘博教育咨詢"},{"join_tel":"13130999884","join_name":"任學(xué)雨","join_card_afterfour":"043X","join_school":"銘博教育咨詢"},{"join_tel":"13130999885","join_name":"任學(xué)雨","join_card_afterfour":"043X","join_school":"銘博教育咨詢"}]order_id31489timestamp1575001757726994(str_encrypt)固定加密字符串

大概思路:

  1.將輸入字符串切割為list

  2.提取數(shù)組指定參數(shù)

  3.提取除sign之外的非數(shù)組指定參數(shù)并排序(asicc碼排序)

  4.處理數(shù)組參數(shù)拼接問(wèn)題(先處理數(shù)組內(nèi)參數(shù),將key與value轉(zhuǎn)換為字典,再將字典添加至list,最后拼接字符串'join_course‘,拼接非數(shù)組參數(shù)與加密字符串)

  5.計(jì)算加密字符串sign并提取輸入的字符串

  6.拼接最終的字符串,并處理請(qǐng)求數(shù)據(jù)格式

def fwh_sign_sha1_Array(self,str_in):#服務(wù)請(qǐng)求簽名處理封裝(請(qǐng)求格式為數(shù)組時(shí)的封裝)
    search_time_str='timestamp:'
    search_sign_str='sign:'
    str_inSource=re.search('(%s.+)'%(search_time_str),str_in)#匹配字段時(shí)間戳(timestamp)
    if str_inSource is not None:
      time_str=self.get_timestamp()#最終需要的時(shí)間戳,13位
      str_inSource=str_inSource.group()
      search_str_inSource=re.search('\s',str_inSource)
      #匹配時(shí)間戳,key與value是否包含空格
      #如果包含空格,替換時(shí)加上空格,如果不處理會(huì)有問(wèn)題(字符串格式與其他地方不一致)
      if search_str_inSource is not None:
        str_equalSource=re.sub(str_inSource,'%s%s%s'%(search_time_str,search_str_inSource.group(),time_str),
        str_in)#將輸入的時(shí)間戳替換為需要的時(shí)間戳,并加上匹配出來(lái)得空格
      else:
        str_equalSource=re.sub(str_inSource,'%s%s'%(search_time_str,time_str),
        str_in)#將輸入的時(shí)間戳替換為需要的時(shí)間戳
      input_list_source=str_equalSource.split('\n')#以換行符分隔字符串并轉(zhuǎn)換位列表
      input_list=[a for a in input_list_source 
        if (search_sign_str or '%s\s'%(search_sign_str) ) not in a]#列表過(guò)濾字段sign
      out_str='\n'.join(input_list)#將排序后的list拼接為字符串
      out_list_join_course=[a for a in input_list if ('[' and ']') in a ]#去除數(shù)組外的其他參數(shù)
      input_list_other=sorted([a for a in input_list if ('[' or ']') not in a ])#獲取數(shù)組外的其他參數(shù)并排序
      input_list_other_str='\n'.join(input_list_other)#將排序后的list拼接為字符串
      input_out_list_other_str=self.requestDataToStr_firefoxAndChrome(input_list_other_str,'','').decode()#獲取拼接完成后的請(qǐng)求參數(shù)字符串(sign)
      join_course_list=[]#數(shù)組
      join_course_dict={}#數(shù)組中的dict
      for index,i in enumerate(out_list_join_course):
        join_course_index=i.find('[')
        join_course=i[:join_course_index]#匹配join_course
        Array_index=i[join_course_index:].find(']')#匹配[index]的下標(biāo)
        Array=i[join_course_index:][:Array_index+1]#取出[index]
        Array_key_data=i[join_course_index:][Array_index+1:]#取出[0]后面的值
        search_colon=Array_key_data.find(':')#匹配出冒號(hào)的index
        Array_key=Array_key_data[1:search_colon-1]#匹配key(冒號(hào)前面的值)并去除[]
        Array_value=Array_key_data[search_colon+1:]#匹配value(冒號(hào)后面的值)
        join_course_dict[Array_key]=Array_value#將匹配出來(lái)的key與value添加至dict
        if index+1<len(out_list_join_course):
          #判斷上一個(gè)元素的部分內(nèi)容(索引前的內(nèi)容)是否包含于list下一個(gè)元素的內(nèi)容
          #(如果不包含那么說(shuō)明當(dāng)前元素就是本組數(shù)據(jù)的最后一個(gè),此時(shí)將dict添加至對(duì)應(yīng)的list)
          #并清空字典(不清除會(huì)導(dǎo)致最終插入的值是重復(fù)的,因?yàn)閗ey是一樣的)
          if join_course+Array not in(out_list_join_course[index+1]):
            join_course_list.append(join_course_dict)
            join_course_dict={}
        else:#如果當(dāng)前元素是list中的最后一個(gè)元素那么直接添加將dict至對(duì)應(yīng)的list
          join_course_list.append(join_course_dict)
          join_course_dict={}
      #將list里面的數(shù)組轉(zhuǎn)換為json格式,這里只能對(duì)list進(jìn)行使用,不用對(duì)數(shù)組中的dict使用
      #ensure_ascii:防止中文被轉(zhuǎn)義,separators:去除字符串中多余的空格
      join_course_list=json.dumps(join_course_list,ensure_ascii=False,separators=(',', ':'))
      #拼接加密前的請(qǐng)求字符串,用換行符區(qū)分?jǐn)?shù)組參數(shù)與非數(shù)組參數(shù)(目的是方便轉(zhuǎn)換為list)
      join_course_str=join_course+str(join_course_list)+'\n'+input_out_list_other_str
      join_course_str_list=sorted(join_course_str.split('\n'))#對(duì)list進(jìn)行排序處理
      join_course_last_str=''.join(join_course_str_list)#對(duì)排序后的list拼接為字符串
      out_sign_str=self.sha1_Encry(join_course_last_str)#得到加密后的加密字符串
      str_inSource_sign=re.search('(%s.+)'%(search_sign_str),str_in)#匹配字段簽名驗(yàn)證(sign)
      if str_inSource_sign is not None:
        str_inSource_sign=str_inSource_sign.group()
        search_inSource_sign=re.search('\s',str_inSource)
        #匹配sign,key與value是否包含空格
        #如果包含空格,替換時(shí)加上空格,如果不處理會(huì)有問(wèn)題(字符串格式與其他地方不一致)
        if search_inSource_sign is not None:
          str_last_sign=re.sub(str_inSource_sign,'%s%s%s'%(search_sign_str,search_inSource_sign.group(),
          out_sign_str),str_equalSource)#將輸入的時(shí)間戳替換為需要的時(shí)間戳
        else:
          str_last_sign=re.sub(str_inSource_sign,'%s%s'%(search_sign_str,out_sign_str),
          str_equalSource)#將輸入的時(shí)間戳替換為需要的時(shí)間戳
        # print(str_last_sign)
        str_give=self.requestDataToStr_firefoxAndChrome(str_last_sign)
        return str_give

      else:
        print('輸入字符串沒(méi)有sign對(duì)象:sign,無(wú)法完成數(shù)據(jù)轉(zhuǎn)換')
        return None

    else:
      print('輸入字符串沒(méi)有時(shí)間戳對(duì)象:timestamp,無(wú)法完成數(shù)據(jù)轉(zhuǎn)換')
      return None

期間遇到的問(wèn)題:

  1.dict的單引號(hào)在使用json解析時(shí)會(huì)出問(wèn)題,需要轉(zhuǎn)換為雙引號(hào)("),使用json.dumps可處理為這樣的格式

  2.json.dumps方法的問(wèn)題:1.中文會(huì)自動(dòng)轉(zhuǎn)義,需指定參數(shù)ensure_ascii=false,默認(rèn)時(shí)true;2.轉(zhuǎn)換是會(huì)自動(dòng)產(chǎn)生空格,然而開(kāi)發(fā)加密時(shí)沒(méi)有空格,需要去掉,需指定參數(shù)separators=(',', ':')

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • django channels使用和配置及實(shí)現(xiàn)群聊

    django channels使用和配置及實(shí)現(xiàn)群聊

    本文主要介紹了django channels使用和配置及實(shí)現(xiàn)群聊,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Python調(diào)用JavaScript代碼的方法

    Python調(diào)用JavaScript代碼的方法

    這篇文章主要介紹了Python調(diào)用JavaScript代碼的方法,幫助大家在不同場(chǎng)景里,采用的最佳調(diào)用方式,提高程序的性能,感興趣的朋友可以了解下
    2020-10-10
  • python?tkinter實(shí)現(xiàn)彈窗的輸入輸出

    python?tkinter實(shí)現(xiàn)彈窗的輸入輸出

    這篇文章主要為大家詳細(xì)介紹了python?tkinter實(shí)現(xiàn)彈窗的輸入輸出,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 在python中實(shí)現(xiàn)發(fā)送短信功能

    在python中實(shí)現(xiàn)發(fā)送短信功能

    工作中我們經(jīng)常會(huì)用到發(fā)短信的需求,那么如何在python代碼中實(shí)現(xiàn)發(fā)短息你的需求呢,本文我們就一起深入探討下,文中有詳細(xì)的代碼示例供大家參考,具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-04-04
  • Python進(jìn)行有限元仿真的使用及創(chuàng)建

    Python進(jìn)行有限元仿真的使用及創(chuàng)建

    這篇文章主要為大家介紹了Python進(jìn)行有限元仿真的創(chuàng)建及使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Python利用sched模塊實(shí)現(xiàn)定時(shí)任務(wù)

    Python利用sched模塊實(shí)現(xiàn)定時(shí)任務(wù)

    今天我們來(lái)介紹一下Python當(dāng)中的定時(shí)任務(wù),主要用到的模塊是sched,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-04-04
  • Python實(shí)現(xiàn)將一段話txt生成字幕srt文件

    Python實(shí)現(xiàn)將一段話txt生成字幕srt文件

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)將一段話txt生成字幕srt文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-02-02
  • pandas中merge函數(shù)的用法

    pandas中merge函數(shù)的用法

    merge()函數(shù)是Pandas中用于合并兩個(gè)DataFrame的函數(shù),本文主要介紹了pandas中merge函數(shù)的用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • OpenCV圖像處理之七種常用圖像幾何變換

    OpenCV圖像處理之七種常用圖像幾何變換

    這篇文章主要介紹了OpenCV圖像處理中常用的幾個(gè)圖像幾何變換:裁剪、放大、縮小、平移、錯(cuò)切、鏡像、旋轉(zhuǎn)、透視等。文中示例代碼非常詳細(xì),需要的朋友可以參考一下
    2021-12-12
  • python將一組數(shù)分成每3個(gè)一組的實(shí)例

    python將一組數(shù)分成每3個(gè)一組的實(shí)例

    今天小編就為大家分享一篇python將一組數(shù)分成每3個(gè)一組的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11

最新評(píng)論

图木舒克市| 山阳县| 扎赉特旗| 雅安市| 洞口县| 建昌县| 清镇市| 安图县| 莱阳市| 安阳市| 兴业县| 基隆市| 贵南县| 丰镇市| 曲周县| 泊头市| 山丹县| 汶川县| 民权县| 安平县| 四川省| 石首市| 鹰潭市| 临江市| 吉首市| 高陵县| 鹤壁市| 类乌齐县| 岚皋县| 安陆市| 平凉市| 密山市| 通海县| 菏泽市| 清河县| 吉林市| 高要市| 青神县| 塔河县| 广昌县| 宜川县|