python rsa加密解密

import rsa
import base64


class Crypto:
    def __init__(self):
        pass
    def savekey(self):
        '''
        新建公钥和私钥并保存到本地
        :return:
        '''
        pubkey, privkey = rsa.newkeys(1024)
        pub = pubkey.save_pkcs1() #以pem格式保存pubkey
        pri = privkey.save_pkcs1() #以pem格式保存privkey
        with open('./keys/pubkey.pem','w+') as f:
            f.write(pub.decode('utf8'))
        with open('./keys/privkey.pem','w+') as f:
            f.write(pri.decode('utf8'))
    def encrypto(self,msg):
        '''
        用公钥加密msg
        :return:
        '''
        with open('./keys/pubkey.pem', 'r') as f:
            p = f.read()
        pubkey = rsa.PublicKey.load_pkcs1(p.encode('utf8'))  #pem格式加载公钥,返回pkcs
        crypto = rsa.encrypt(msg.encode('utf8'),pub_key=pubkey) # 使用PKCS加密给定的消息,返回类型bytes

        #对于保存,网络传输,打印不乱码,需要通base64编码进行转换;
        # base64编解码能把一些无法直接用文件本信息编码的二进制数据,转换成常规的二进制数据。
        crypto_msg = base64.encodebytes(crypto).decode('utf8')  #加密后的文本信息msg
        print(crypto_msg)
        # 保存加密后的信息到本地
        with open('./keys/msg.txt', 'w+') as f:
            f.write(crypto_msg)
        return crypto_msg
    def decrypto(self,crypto_msg=None):
        '''
        私钥解密msg文件
        :return:
        '''
        #读取本地私钥
        with open('./keys/privkey.pem', 'r') as f:
            p = f.read()
        privkey = rsa.PrivateKey.load_pkcs1(p.encode('utf8'))  #pem格式加载私钥

        # 读取加密文件
        with open('./keys/msg.txt', 'r') as f:
            crypto_msg = f.read()
        
        # base64解码
        crypto_msg = base64.decodebytes(crypto_msg.encode('utf8'))

        decrypto_msg = rsa.decrypt(crypto_msg,privkey)  #私钥解密
        decrypto_msg = decrypto_msg.decode('utf8')  #utf8解码
        print(decrypto_msg)
        return decrypto_msg

crypto = Crypto()
crypto.savekey()  #保存公钥私钥
crypto.encrypto('你好')  #使用公钥加密信息
crypto.decrypto()  # 使用私钥解密信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值