文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么利用Python实现RSA加密解密

2023-06-29 22:30

关注

这篇文章主要介绍“怎么利用Python实现RSA加密解密”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么利用Python实现RSA加密解密”文章能帮助大家解决问题。

RSA加密实验基本流程:

一、选取两个大素数p、q,并计算得到n、phi_n

二、选取常用的e = 0x10001,方便将幂运算优化为左移,加快运算速度

三、计算d,使用了扩展欧几里得算法

四、输入明文a,将明文转化为可以用于计算的数字形式

五、对a使用快速幂取模,得到密文b,以16进制显示

RSA解密流程:

六、对b使用快速幂取模,得到明文a,以字符形式显示

一、安装模块

pip install pycryptodome

二、生成密钥对

from Crypto.PublicKey import RSAdef create_rsa_pair(is_save=False):    '''    创建rsa公钥私钥对    :param is_save: default:False    :return: public_key, private_key    '''    f = RSA.generate(2048)    private_key = f.exportKey("PEM")  # 生成私钥    public_key = f.publickey().exportKey()  # 生成公钥    if is_save:        with open("crypto_private_key.pem", "wb") as f:            f.write(private_key)        with open("crypto_public_key.pem", "wb") as f:            f.write(public_key)    return public_key, private_keydef read_public_key(file_path="crypto_public_key.pem") -> bytes:    with open(file_path, "rb") as x:        b = x.read()        return bdef read_private_key(file_path="crypto_private_key.pem") -> bytes:    with open(file_path, "rb") as x:        b = x.read()        return b

三、加密

import base64from Crypto.Cipher import PKCS1_v1_5from Crypto.PublicKey import RSAdef encryption(text: str, public_key: bytes):# 字符串指定编码(转为bytes)text = text.encode('utf-8')# 构建公钥对象cipher_public = PKCS1_v1_5.new(RSA.importKey(public_key))# 加密(bytes)text_encrypted = cipher_public.encrypt(text) # base64编码,并转为字符串text_encrypted_base64 = base64.b64encode(text_encrypted ).decode()return text_encrypted_base64 if __name__ == '__main__':public_key = read_public_key()text = '123456'text_encrypted_base64 = encryption(text, public_key)print('密文:',text_encrypted_base64)

四、解密

import base64from Crypto.Cipher import PKCS1_v1_5from Crypto import Randomfrom Crypto.PublicKey import RSAdef decryption(text_encrypted_base64: str, private_key: bytes):# 字符串指定编码(转为bytes)text_encrypted_base64 = text_encrypted_base64.encode('utf-8')# base64解码text_encrypted = base64.b64decode(text_encrypted_base64 )# 构建私钥对象cipher_private = PKCS1_v1_5.new(RSA.importKey(private_key))# 解密(bytes)text_decrypted = cipher_private.decrypt(text_encrypted , Random.new().read)# 解码为字符串text_decrypted = text_decrypted.decode()return text_decrypted if __name__ == '__main__':# 生成密文public_key = read_public_key()text = '123456'text_encrypted_base64 = encryption(text, public_key)print('密文:',text_encrypted_base64)# 解密private_key = read_private_key()text_decrypted = decryption(text_encrypted_base64, private_key)print('明文:',text_decrypted)

五、完整代码

import base64from Crypto.Cipher import PKCS1_v1_5from Crypto import Randomfrom Crypto.PublicKey import RSA# ------------------------生成密钥对------------------------def create_rsa_pair(is_save=False):    '''    创建rsa公钥私钥对    :param is_save: default:False    :return: public_key, private_key    '''    f = RSA.generate(2048)    private_key = f.exportKey("PEM")  # 生成私钥    public_key = f.publickey().exportKey()  # 生成公钥    if is_save:        with open("crypto_private_key.pem", "wb") as f:            f.write(private_key)        with open("crypto_public_key.pem", "wb") as f:            f.write(public_key)    return public_key, private_keydef read_public_key(file_path="crypto_public_key.pem") -> bytes:    with open(file_path, "rb") as x:        b = x.read()        return bdef read_private_key(file_path="crypto_private_key.pem") -> bytes:    with open(file_path, "rb") as x:        b = x.read()        return b# ------------------------加密------------------------def encryption(text: str, public_key: bytes):    # 字符串指定编码(转为bytes)    text = text.encode('utf-8')    # 构建公钥对象    cipher_public = PKCS1_v1_5.new(RSA.importKey(public_key))    # 加密(bytes)    text_encrypted = cipher_public.encrypt(text)    # base64编码,并转为字符串    text_encrypted_base64 = base64.b64encode(text_encrypted).decode()    return text_encrypted_base64# ------------------------解密------------------------def decryption(text_encrypted_base64: str, private_key: bytes):    # 字符串指定编码(转为bytes)    text_encrypted_base64 = text_encrypted_base64.encode('utf-8')    # base64解码    text_encrypted = base64.b64decode(text_encrypted_base64)    # 构建私钥对象    cipher_private = PKCS1_v1_5.new(RSA.importKey(private_key))    # 解密(bytes)    text_decrypted = cipher_private.decrypt(text_encrypted, Random.new().read)    # 解码为字符串    text_decrypted = text_decrypted.decode()    return text_decryptedif __name__ == '__main__':    # 生成密钥对    # create_rsa_pair(is_save=True)    # public_key = read_public_key()    # private_key = read_private_key()    public_key, private_key = create_rsa_pair(is_save=False)    # 加密    text = '123456'    text_encrypted_base64 = encryption(text, public_key)    print('密文:', text_encrypted_base64)    # 解密    text_decrypted = decryption(text_encrypted_base64, private_key)    print('明文:', text_decrypted)

怎么利用Python实现RSA加密解密

关于“怎么利用Python实现RSA加密解密”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯