亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:19日期:2022-07-29 13:04:10

代碼示例

#輸入’’’order_id:31489join_course[0][join_tel]:13130999882join_course[0][join_name]:任學(xué)雨join_course[0][join_card_afterfour]:043Xjoin_course[0][join_school]:銘博教育咨詢join_course[1][join_tel]:13130999883join_course[1][join_name]:任學(xué)雨join_course[1][join_card_afterfour]:043Xjoin_course[1][join_school]:銘博教育咨詢join_course[2][join_tel]:13130999884join_course[2][join_name]:任學(xué)雨join_course[2][join_card_afterfour]:043Xjoin_course[2][join_school]:銘博教育咨詢join_course[3][join_tel]:13130999885join_course[3][join_name]:任學(xué)雨join_course[3][join_card_afterfour]:043Xjoin_course[3][join_school]:銘博教育咨詢timestamp:1574921552698sign: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ù)拼接問題(先處理數(shù)組內(nèi)參數(shù),將key與value轉(zhuǎn)換為字典,再將字典添加至list,最后拼接字符串’join_course‘,拼接非數(shù)組參數(shù)與加密字符串)

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

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

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

期間遇到的問題:

1.dict的單引號在使用json解析時會出問題,需要轉(zhuǎn)換為雙引號('),使用json.dumps可處理為這樣的格式

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 国产一区二区三区久久 | 99久久精品男女性高爱 | 欧美在线视频网站 | 久久久久久久久久久9精品视频 | 亚洲综合另类 | 国产精品成人久久久久久久 | 色多多在深夜释放自己黄 | 99久久国语露脸精品对白 | 免费中日高清无专码有限公司 | 中国一级性生活片 | 国产精品视频在线播放 | 亚洲综合第一区 | 国产激情在线观看 | 国产原创视频在线 | 国产v在线在线观看羞羞答答 | 国产免费高清 | 高潮岳喷我一脸 | 国产国产成人人免费影院 | 香蕉啪 | 欧美一级特黄高清免费 | 一区两区三不卡 | 欧美精品大片 | 亚洲视频福利 | 亚洲美女视频一区 | 蜜桃臀久久伊人福利 | 亚洲第一成人天堂第一 | 看真人视频一级毛片 | 欧美大片国产在线永久播放 | 免费看黄色三级毛片 | 黄色网络在线观看 | a级国产片免费观看 | 曰本又色又爽又黄三级视频 | 国产成人亚洲综合a∨婷婷 国产成人亚洲综合无 | 自拍第一页 | 精品久久亚洲 | 久久久久亚洲精品中文字幕 | 1024在线免费观看 | 国产一级做a爰片久久毛片男 | 成人永久免费 | 在线视频日韩 | 自拍网视频|