python实现RSA加解密

复制代码
# coding=utf-8
"""
@author:Eleven
created on:2018年10月30日
"""

import binascii
from Cryptodome.PublicKey import RSA
from Cryptodome.Cipher import PKCS1_v1_5

# 定义全局变量以便在函数中引用
public_key=''
private_key=''
hex_data=''

plaintext = input('输入要加密的文本:')

'''RSA 加解密'''
class RsaCrypto():
    '''生成RSA秘钥对'''
    def create_rsa_key(self):
        global public_key,private_key
        try:
            key = RSA.generate(2048)
            encrypted_key = key.exportKey(pkcs=8)

            public_key = key.publickey().exportKey().decode('utf-8')
            private_key = encrypted_key.decode('utf-8')

            return {'state': 1, 'message': {'public_key': public_key, 'private_key': private_key}}
        except Exception as err:
            return {'state': 0, 'message': str(err)}

    '''加密方法'''
    def encrypt(self, public_key, plaintext):
        global hex_data
        try:
            recipient_key = RSA.import_key(public_key)
            cipher_rsa = PKCS1_v1_5.new(recipient_key)
            en_data = cipher_rsa.encrypt(plaintext.encode('utf-8'))
            hex_data = binascii.hexlify(en_data).decode('utf-8')
            return {'state': 1, '加密后的密文是:': hex_data}
        except Exception as err:
            return {'state': 0, '加密报错': str(err)}

    '''解密方法'''
    def decrypt(self, private_key, hex_data):
        try:
            private_key = RSA.import_key(private_key)
            cipher_rsa = PKCS1_v1_5.new(private_key)

            en_data = binascii.unhexlify(hex_data.encode('utf-8'))
            data = cipher_rsa.decrypt(en_data, None).decode('utf-8')

            return {'state': 1, '解密后的明文是': data}
        except Exception as err:
            return {'state': 0, '解密出错': str(err)}


if __name__ == '__main__':
    RsaCrypto().create_rsa_key()
    print(RsaCrypto().encrypt(public_key,plaintext))
    print(hex_data)
    print(RsaCrypto().decrypt(private_key,hex_data))
复制代码

 

posted @   Eleven_Liu  阅读(4679)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示