美文网首页
python实现RSA2签名

python实现RSA2签名

作者: 是立品啊 | 来源:发表于2020-08-06 10:43 被阅读0次

签名过程

签名生成的通用步骤如下:

  1. 将所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2={k1=v1&k2=v2…}&key3=[value3,value32] &key4=[{key41=value41&key42=value42},{key41=value411&key42=value422}]…)拼接成字符串。

注意以下重要规则:

  • 参数名ASCII码从小到大排序(字典序)

  • 如果参数的值为空不参与签名;

  • 参数名区分大小写;

  • 验证调用返回或主动通知签名时,传送的signTypesign参数不参与签名,将生成的签名与该sign值作校验。

  • 如果集合参数内包含集合,那么此包含的集合也递归使用url键值对排序拼装方式。

  1. 对拼装后的字符串使用SHA256运算,得到运算后的值。

  2. 将运算后的值使用自己的RSA私钥进行签名,将签名后的值Base64编码后封装到请求报文的sign字段中;

Python实现

# pip install pycryptodome 安装
from Crypto.Hash import  SHA256
from Crypto.Signature import PKCS1_v1_5 as Sig_pk
from Crypto.PublicKey import RSA
import base64


def sign_str(parm):
  """
  参数排序
  """
    str_parm = ''
    for p in sorted(parm):
        print(p)
        if p in ['sign','signType'] or not parm[p]:
            continue
        elif isinstance(parm[p], dict):
            str_parm += str(p) + "=" + "{" + sign_str(parm[p]) + "}" + "&"
        else:
            str_parm += str(p) + "=" + str(parm[p]) + "&"
    return str_parm[:-1]



def sign_by_private_key(sortData,private_key):
    """
    ras2签名
    """
    # 获取私钥
    key = base64.b64decode(private_key)

    rsakey = RSA.importKey(key)
    # 根据sha算法处理签名内容  (此处的hash算法不一定是sha,看开发)
    data = SHA256.new(sortData.encode())

    # 私钥进行签名
    sig_pk = Sig_pk.new(rsakey)
    signer = sig_pk.sign(data)
    # 将签名后的内容,转换为base64编码
    result = base64.b64encode(signer)
    # 签名结果转换成字符串
    data = result.decode()
    return  data


if __name__ == '__main__':
    pass

相关文章

  • python实现RSA2签名

    签名过程 签名生成的通用步骤如下: 将所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASC...

  • PHP RSA2 签名算法

    什么是RSA2? RSA2是在原来SHA1WithRSA签名算法的基础上,新增了支持SHA256WithRSA的签...

  • PHP-RSA2签名

    什么是RSA2:RSA2就是在原来SHA1WithRSA签名算法的基础上,新增了支持SHA256WithRSA的签...

  • PHP RSA2 签名算法

    博主在项目中遇到PHP签名算法,找了很多资料,现在总结下。 RSA2是在原来SHA1WithRSA签名算法的基础上...

  • 计算机安全学-第四次实践作业-2018/4/17

    [new] 1、用Python或Sage实现RSA算法的加密、解密、签名/验证签名使用sage实现RSA算法进行加...

  • RSA 加密 和 DH 密钥实现

    任务一用Python或Sage实现RSA算法的加密、解密、签名/验证签名 实验代码 任务二用Python或Sage...

  • 计算机安全学第四次实践作业

    1.Python实现RSA算法的加密、解密、签名/验证签名 1.1生成秘钥 1.2加密 1.3解密 1.4数字签名...

  • 安卓批量签名工具使用说明

    安卓批量签名工具使用Python编写,利用此工具对未签名apk实现修改AndroidManifest.xml的多个...

  • Python RSA数字签名实践

    之前讲到RSA可以用来加密和数字签名,这里是RSA用作数字签名。Python的pycrypto库实现的数字签名有一...

  • 计算机安全学第四次实践作业

    作业内容一: 用Python或Sage实现RSA算法的加密、解密、签名/验证签名 因为如果keys和明文太大的话我...

网友评论

      本文标题:python实现RSA2签名

      本文链接:https://www.haomeiwen.com/subject/lawyrktx.html