• 使用类封装一个签名规则


    这节主要是使用类封装一个签名规则的练习,有一个签名规则的需求是:

    A、输入数据:
    1、请求数据:
    vendorId=1697&posCode=pos006&ip=127.0.0.1&posVersion=2.1.1.1.1&mac=;D4-81-D7-CA-20-29;7C-67-A2-9A-06-05;7C-67-A2-9A-06-06;7C-67-A2-9A-06-09;00-00-00-00-00-0000E0
    2:商家编码:
    1697

    B、计算规则:
    1、将商家编码(vendorId)1697进行两次MD5加密得到一个字符串 Astr:09B764965CE4E92BED8BD3140E22D5CF
    2、将请求数据
    vendorId=1697&posCode=pos006&ip=127.0.0.1&posVersion=2.1.1.1.1&mac=;D4-81-D7-CA-20-29;7C-67-A2-9A-06-05;7C-67-A2-9A-06-06;7C-67-A2-9A-06-09;00-00-00-00-00-0000E0
    进行urlDecode处理(编码格式为utf-8)得到一个字符串urlDecodeStr:
    vendorId=1697&posCode=pos006&ip=127.0.0.1&posVersion=2.1.1.1.1&mac=;D4-81-D7-CA-20-29;7C-67-A2-9A-06-05;7C-67-A2-9A-06-06;7C-67-A2-9A-06-09;00-00-00-00-00-0000E0
    3、urlDecodeStr + Astr 拼接得到一个待加密的字符串 beforeMD5
    vendorId=1697&posCode=pos006&ip=127.0.0.1&posVersion=2.1.1.1.1&mac=;D4-81-D7-CA-20-29;7C-67-A2-9A-06-05;7C-67-A2-9A-06-06;7C-67-A2-9A-06-09;00-00-00-00-00-0000E009B764965CE4E92BED8BD3140E22D5CF
    然后将 beforeMD5字符串进行加密得到最终的签名:
    6F811B63B11D92BA4A359E6DC98EEE31

    我们来分析需求:
    1、请求数据获取到
    2、提取到商家编码
    3、将商家编码进程2次md5 得到astr
    4、再将请求数据进行一次urldecode,结果是urlstr
    5、astr+url_str 进行 MD5得到 beforeMD5
    6.将beforeMD5 再次进行md5得到签名

    具体代码实现:
    
    
    from urllib import parse
    import hashlib

    class Sign(object):#定义类
        def __init__(self,req_data):
            self.req_data = req_data  #这写了self的话,在其他的函数里面也可以用self.xx
            self.get_verid()
            self.get_sign()
        def md5(self,s):#定义加密函数
            md = hashlib.md5()
            md.update(s.encode())
            return md.hexdigest()#返回加密结果
    
        def get_verid(self):#定义获取vendorId的函数
            data_dict = {}
            sub_list = self.req_data.split('&')
            #已'&'分割请求数据,得到的结果是vendorId=1697 posCode=pos006 ip=127.0.0.1这样的数据
            for i in sub_list:
                k, v = i.split('=')#以'='分割每次循环i的值
                data_dict[k] = v#将分割i得到的k,v存到字典中
            self.verid = data_dict.get('vendorId')#取到vendorId
        def get_sign(self):
            frist = self.md5(self.verid)#将vendorId进行加密
            astr = self.md5(frist)#将vendorId进行第二次加密
            url_str = parse.quote_plus(self.req_data)#将请求数据进行urldecode编码处理
            self.sign = self.md5(astr+url_str)#将拼接的字符串进行md5加密
            return self.sign#得到最终签名
    if __name__ == '__main__':
        s='vendorId=1697&posCode=pos006&ip=127.0.0.1&posVersion=2.1.1.1.1&mac=;D4-81-D7-CA-20-29;7C-67-A2-9A-06-05;7C-67-A2-9A-06-06;7C-67-A2-9A-06-09;00-00-00-00-00-0000E0'
        abc = Sign(s)#实例化类
        print(abc.sign)
    
    #运行结果:2e8d260f14fc05a2881470504fb6f9d5
     
     
  • 相关阅读:
    不同storyboard间跳转
    WWDC2014:留给微软的时间不多了!
    IBOutletCollection 索引获取顺序问题
    iOS下单例模式实现(二)利用宏定义快速实现
    iOS下单例模式实现(一)(objective-c arc gcd)
    windows phone UI吐槽---跑偏了就再也跑不回来了
    iOS沙盒(SanBox)机制与文件操作
    转载:iOS静态库与动态库
    KVO与KVC理解
    iOS多线程编程的几种方式
  • 原文地址:https://www.cnblogs.com/xiehong/p/9140957.html
Copyright © 2020-2023  润新知