python实现RSA1签名及验签

本文介绍了如何使用Python结合pyopenssl和pyjks库来处理由JAVA代码生成的licence.cer和licence.keystore文件。主要内容包括加载keystore文件,进行签名及验签功能,涉及到的关键步骤有加载私钥和证书,以及签名和验证签名的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA代码生成licence.cer和licence.keystore,使用python完成桌面工具,完成签名及验签功能

  • 知识点一:加载java代码生成的.keystore文件
    keystore = jks.KeyStore.load(jks_file, passphrase)
  • 知识点二:库文件安装
    1. pip install pyopenssl
    2. pip install pyjks 使用该库需要microsoft c++ 14

链接:https://pan.baidu.com/s/1BWERHiFk7T-8cFBUk4KIbw 提取码:cscs

from OpenSSL import crypto
import OpenSSL
import base64
import jks

_ASN1 = OpenSSL.crypto.FILETYPE_ASN1

def jksfile2context(jks_file, passphrase, key_alias, key_password=None):
    '''
    :param jks_file: keystore文件
    :param passphrase: keystore文件存储密码
    :param key_alias: 私钥别称
    :param key_password: 私钥加密解密密码
    :return: 私钥对象,证书对象
    '''
    keystore = jks.KeyStore.load(jks_file, passphrase)
    pk_entry = keystore.private_keys[key_alias]
    # if the key could not be decrypted using the store password, decrypt with a custom password now
    if not pk_entry.is_decrypted():
        pk_entry.decrypt(key_password)

    pkey = OpenSSL.crypto.load_privatekey(_ASN1, pk_entry.pkey)
    public_cert = OpenSSL.crypto.load_certificate(_ASN1, pk_entry.cert_chain[0][1])
    print(public_cert)
    return keystore, pkey, public_cert


def get_verify(data, signature, public_cert):
    '''
    :param signature: 签名
    :param public_cert: 证书对象
    :return:
    '''
    signature = base64.decodebytes(signature.encode("utf8"))
    try:
        crypto.verify(public_cert, signature, data, 'sha1')  # content传参时byte型需要encode解码下,验签通过返回的为None,验签失败则会返回异常
        result = True
    except:
        result = False
    return result


def sign(pkey, data):
    # 签名
    signature = crypto.sign(pkey, data, 'sha1')
    result = base64.encodebytes(signature)  # 签名结果base64编码
    result_sign = result.decode('utf8').replace('\n', '')
    return result_sign


if __name__ == '__main__':
    keystore, pkey, public_cert = jksfile2context('./licence.keystore', 'shouhux123', 'base', key_password=None)

    data = '184804103800452-54-00-13-3C-E57ad0c023c1c74f7694cc782c7916e84d科技有限公司'
    data2 = '284804103800452-54-00-13-3C-E57ad0c023c1c74f7694cc782c7916e84d科技有限公司'
    # 验签
    print(get_verify(data2, sign(pkey, data), public_cert))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值