不愿意做出改变 ≈ 坐吃等死!!

python使用M2Crypto根据已有私钥加密数据发送请求

上一篇 / 下一篇  2017-03-23 12:10:31 / 个人分类:python


背景:
项目是跟银行对接,接收与发送数据需要sha1withRSA加密,然后其他测试人员需要导入数据到银行的系统,但是呢? 目前已有写好的java代码,可是我对java不熟悉,所以用python来写,目的是做成一个web页面供其他人使用,上传csv格式的文件即可达到目的。


代码如下:(琢磨了四天,第四天才写出来!!!!)

# coding:utf-8

from M2Crypto import RSA, BIO, EVP
import os


def sign_sha1(data):
    # 下面的这三行 我也不是很懂 待研究
    m = EVP.MessageDigest("sha1")  # 先计算散列值
    m.update(data)
    digest = m.final()

    mb = None
    # begin 和 end 是私钥 或者 公钥格式要求
    begin = '-----BEGIN PRIVATE KEY-----\n'
    end = '\n-----END PRIVATE KEY-----'
    with open(os.path.join(os.getcwd(), r'private_key.pem'), 'rb') as f:
        # 读取pem文件内私钥的数据
        pri_key = f.read()
        # 私钥数据是一行,因为对格式有要求,将它分解为多行,每64个字符一行
        pri_key = [pri_key[i:i + 64] for i in range(0, len(pri_key), 64)]
        # 以BIO的方式读入内存,如果以直接读取文件 或者 读字符串的方式 会有其他错误,暂时以此方法避免
        mb = BIO.MemoryBuffer(begin + "\n".join(pri_key) + end)
    if mb:
        key = RSA.load_key_bio(mb)
        result = key.sign(digest, 'sha1')
        # 将加密的密文从base64解为str类型
        return result.encode('base64')
    else:
        raise 'error'


完全手打,欢迎交流!

TAG: Python 加密 python M2Crypto 私钥加密 公钥解密 python加密 python解密

 

评分:0

我来说两句

Open Toolbar