接口加密测试,所谓crypto模块的RAS非对称加密,python的脚本实现


from Crypto import Signature
import base64
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import MD5, SHA256

def
signature_body(message, rsa_path): '''使用私钥签名''' with open(rsa_path) as f: key = f.read() rsakey = RSA.importKey(key) signer = PKCS1_v1_5.new(rsakey) data = datadeal(message) digest = SHA256.new() digest.update(data.encode()) sign = signer.sign(digest) signature = base64.b64encode(sign).decode() # print('签名生成',signature) return signature

参数解释:

signature_body()是接口参数加密的方法,需要传两个参数

message:请求体参数,字典格式

ras_path:私钥路径

处理之后的签名是str 类型

 

 

 

datadeal( )是处理数据的方法,各人面临业务的需求不同,所以自己写就行了,以下是我的业务结构:

 

def datadeal(r):
    # 键的列表
    sr = sorted(r)
    pre_d = []
    for j in sr:
        if type(r[j]) == dict:
            # print('继续追踪', j)
            c = datatrack(r[j])
            pre_d.append(j + '=' + c)

        else:
            pre_d.append('%s=%s' % (j, r[j]))

    newpred = '&'.join(pre_d)
    # print('数据处理格式',newpred)
    return newpred
    # return bytes(newpred,encoding='utf-8')


def datatrack(r={}):
    p = []
    r1 = sorted(r)
    for i in r1:
        if type(r[i]) != dict:
            p.append(i + ':' + r[i])
        else:
            c = datatrack(r[i])
            p.append(i + ":" + c)
    p1 = ' '.join(p)
    conrdi = "map[" + p1 + "]"
    return conrdi

 

 

坑:

 

 

 

 以上是我在site-package 里只找到的Crypto库文件,但是我在终端里查找到crypto和Crypto,两个首字母大小写不一致的版本信息。

所以大家在安装pip install crypto 之后,import crypto 有可能是个空的库,这时注意下site-package里把crypto改成Crypto,首页母改为大写

正确的引用是这样

 

posted @ 2020-12-12 16:39  大鸡  阅读(154)  评论(0编辑  收藏  举报