【python编程】windows中Python3.8利用M2Crypto实现RSA公私钥双向加解密

本文介绍了在Windows10环境下,使用Python3.8和M2Crypto库实现RSA非对称加密的详细过程,包括公钥加密+私钥解密和私钥加密+公钥解密。文章提供了安装M2Crypto的步骤以及生成和使用公私钥对的代码示例。

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

python中可以使用利用rsa、pycryptodome和m2crypto等第三方库实现RSA非对称加解密。

但是rsa和pycryptodome库只能实现公钥加密+私钥解密、私钥签名+公钥验证只有m2crypto可以实现公钥加密+私钥解密、私钥加密+公钥解密


笔者通过百度、bing、360等各种引擎搜索发现:

  • 要么是在linux或macOS环境中配置m2crypto;(✘)
  • 要么是在windows下的python2环境中配置m2crypto;(✘)
  • 要么是多年前的帖子,建议通过pip install --egg M2CryptoWin64下载安装,经验证,该命令在windows 64位操作系统 python3环境下已失效。(✘)

总之网络上充斥大量不符合要求或过时的无用信息。


本文介绍一下笔者的成功操作,并给出示例代码和相关文件

一.开发环境

1. 操作系统:windows10 64位专业版

2. python:3.8  下载地址

3. M2Crypto:0.35.2 (下载地址见文末

安装步骤:

第一步:先安装python3.8

第二步:双击M2Crypto.exe安装文件进行安装,该程序会自动安装在python3.8安装目录下的“\Lib\site-packages\”文件夹中


二.python代码

1.生成公私钥对

# 生成公私钥对
def generate_PriPubKeypair(self):
    pk = RSA.gen_key(1024, m2.RSA_F4, lambda x: None)
    private = pk.as_pem(None)
    pu = BIO.MemoryBuffer()
    pk.save_pub_key_bio(pu)
    public = pu.read()
    return private, public

2.私钥加密+公钥解密

# 利用私钥加密
def encrypt_by_privatekey(self, msg):
    bytes_16_msg = msg.encode('utf-8')
    bytes_16_encrypted = self.rsa_pri.private_encrypt(bytes_16_msg, RSA.pkcs1_padding)
    str_64_encrypted = b64encode(bytes_16_encrypted).decode()
    return str_64_encrypted


# 利用公钥解密
def decrypt_by_publickey(self, msg):
    bytes_16_encrypted = b64decode(msg.encode())
    bytes_16_decrypted = self.rsa_pub.public_decrypt(bytes_16_encrypted, RSA.pkcs1_padding)
    str_decrypted = bytes_16_decrypted.decode('utf-8')
    return str_decrypted

3.公钥加密+私钥解密

# 利用公钥加密
def encrypt_by_publickey(self, msg):
    bytes_16_msg = msg.encode('utf-8')
    bytes_16_encrypted = self.rsa_pub.public_encrypt(bytes_16_msg, RSA.pkcs1_padding)
    str_64_encrypted = b64encode(bytes_16_encrypted).decode()
    return str_64_encrypted


# 利用私钥解密
def decrypt_by_privatekey(self, msg):
    bytes_16_encrypted = b64decode(msg.encode())
    bytes_16_decrypted = self.rsa_pri.private_decrypt(bytes_16_encrypted, RSA.pkcs1_padding)
    str_decrypted = bytes_16_decrypted.decode('utf-8')
    return str_decrypted

4.运行测试

if __name__=='__main__':
    demo=M2Crypto_Demo()
    ori_msg="人生苦短,我用python!"

    # 私钥加密+公钥解密
    print('1-私钥加密+公钥解密')
    print(demo.encrypt_by_privatekey(ori_msg))
    print(demo.decrypt_by_publickey(demo.encrypt_by_privatekey(ori_msg)))

    print('-'*100)

    # 公钥加密+私钥解密
    print('2-公钥加密+私钥解密')
    print(demo.encrypt_by_publickey(ori_msg))
    print(demo.decrypt_by_privatekey(demo.encrypt_by_publickey(ori_msg)))

6.输出结果

1-私钥加密+公钥解密
rMkeunv7kx2Xl9L/uhVToqzxOD5a/gkmWzye04CAIvVMl9BUk1+QP/YvS0asB6SHaatrRiU6ZRipR8QXaSLwohmvEyaFl1pO2SmDvOA9jmdeadIxUMsx0nFrkS6spoSJPWjPD9D336HoGEHij5q5rX6kEHWh8p1Nl6lCANEg3Io=
人生苦短,我用python!
----------------------------------------------------------------------------------------------------
2-公钥加密+私钥解密
aWlNw+mTOIMmYNDqWCry+xPpbHBLgGJTYlvJANyWpo4ij2uqUpGJQ8jkdUYZxXeGW8GhIUGHNM1S0YlueBVuke0liv955wH2hzPhfIp9ZgoMFRVDNxL1u6uWD9asNkOEMZ15fmCSuUltxUFN3kkhX03X2oz5HL68rgHtguFRAnM=
人生苦短,我用python!

完整示例代码及相关库安装文件下载地址


评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时空worker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值