Pyhon使用M2Crypto模块实现rsa加密解密

Pyhon使用M2Crypto模块实现rsa加密解密

1 问题描述

使用python的M2Crypto模块实现rsa的加密和解密,需要提前准备好M2Crypto的安装包,也可以使用pip install M2Crypto --force命令进行安装。

2 实现

以下脚本会生成公钥和私钥文件

# -*- coding: utf-8 -*-
from M2Crypto import RSA, BIO

rsa = RSA.gen_key(2048, 65537)
# 保存公钥到文件
bio_pub = BIO.MemoryBuffer()
rsa.save_pub_key_bio(bio_pub)
with open('rsa_pub.pem', 'wb') as f:
    f.write(bio_pub.read())

# 保存私钥到文件
bio_pri = BIO.MemoryBuffer()
rsa.save_key_bio(bio_pri, None)
with open('rsa_pri.pem', 'wb') as f:
    f.write(bio_pri.read())
  • 加密
# 读取公钥文件
with open('rsa_pub.pem', 'rb') as f:
    pub_key = f.read()
# 注:也可以执行用字符串表示pub_key,如下:
# pub_key = """
# -----BEGIN PUBLIC KEY-----
# MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyAqaCNKH1Qkw4f+dcE8e
# 16zLpeZhtg7UPpmhd0qu+CycW9ldj0lh/hmlYpHK6tAdKfjuNLI83iPlluyVA2Sz
# KNNwkZD9rA5pTMbdfEYDjWqH3X/Lwq8NrFsRJdP2anEUSmpHShjhjkROY9fLQlON
# KTsWz+HleqQ4A7ftQ3L1pKpPuK1SQ1cNXDSUHXEn6Qm59jWk733T4yje/xWz4meb
# 6iRuf15ssOvODrzFULBhkxTSecDwf6RDNzxTppba6Vcp6z9owXKGN5mckfqXbOfj
# yOvwmoMZntBKjmNxRF7SHvb9ARG7e7pqWPRRiVVFkp/SBeS+4Xi+dGRgMsitPD3z
# UQIDAQAB
# -----END PUBLIC KEY-----
# """

# 创建 RSA 实例
rsa = RSA.load_pub_key_bio(BIO.MemoryBuffer(pub_key))

# 加密数据
data = 'Hello, World!'
ciphertext = rsa.public_encrypt(data, RSA.pkcs1_padding)

# 打印加密结果
print(base64.b64encode(ciphertext))
# 结果:scT5W5KDutzyyYpfw4gNQL8VEWVOdBo1b1oTFWf36pRZIfpUz+VlxCymHnuGnsAn+JvIz3nc+sodpSXRKgO8SSKvzo0cjPxqcIBDBLviPhJNkhlSWSYN985dPs2XPGtxIcMSYdbT64fg6Z0MWHBxV6NoYtTeS/fG0zKRgavaxt52RS6+KHjt9OhJf65AnlrykJXWx71IsIkDqGgPzMeGfJI9aeRn27YhTorGmbMFm0dp65jaGB/nf+/6ibZcBQi044kTjpHP4mElrDjQFSN5RfSX6gmtORctzQi5mZ/4O3NF7aNqckP5pwxIIjRjxUjM83lHJH2sbHNI0/sdqnSrlw==
  • 解密
with open('rsa_pri.pem', 'rb') as f:
    pri_key = f.read()

# 创建 RSA 实例
rsa = RSA.load_key_bio(BIO.MemoryBuffer(pri_key))

# 解密数据
ciphertext = base64.b64decode('scT5W5KDutzyyYpfw4gNQL8VEWVOdBo1b1oTFWf36pRZIfpUz+VlxCymHnuGnsAn+JvIz3nc+sodpSXRKgO8SSKvzo0cjPxqcIBDBLviPhJNkhlSWSYN985dPs2XPGtxIcMSYdbT64fg6Z0MWHBxV6NoYtTeS/fG0zKRgavaxt52RS6+KHjt9OhJf65AnlrykJXWx71IsIkDqGgPzMeGfJI9aeRn27YhTorGmbMFm0dp65jaGB/nf+/6ibZcBQi044kTjpHP4mElrDjQFSN5RfSX6gmtORctzQi5mZ/4O3NF7aNqckP5pwxIIjRjxUjM83lHJH2sbHNI0/sdqnSrlw==')  # 将你的加密数据替换为 Base64 编码的密文
plaintext = rsa.private_decrypt(ciphertext, RSA.pkcs1_padding)

# 打印解密结果
print(plaintext) # 输出:Hello, World!

注意:加密和解密的算法和padding必须保持一致,否则无法解密

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值