暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python RSA加密与解密 公钥和私钥 读写pem文件

捷创源科技 2022-02-12
4537

点击上方蓝字 ● 关注捷创源科技

非对称加密算法:


文件加密需要公开密钥(publickey)和私有密钥(privatekey)。

接收方在发送消息前需要事先生成公钥和私钥,然后将公钥发送给发送方。发送方收到公钥后,将待发送数据用公钥加密,发送给接收方。接收到收到数据后,用私钥解密。

在这个过程中,公钥负责加密,私钥负责解密,数据在传输过程中即使被截获,攻击者由于没有私钥,因此也无法破解。

非对称加密算法的加解密速度低于对称加密算法,但是安全性更高。

非对称加密算法:RSA、DSA、ECC等算法


RSA加密

公钥加密算法,一种非对称密码算法


公钥加密,私钥解密


3个参数:


rsa_n, rsa_e,message


rsa_n, rsa_e 用于生成公钥


message:需要加密的消息


安装 pip install rsa


实例测试:

    # -*- coding: utf-8 -*-
    import rsa
    from binascii import b2a_hex, a2b_hex


    # 全局变量-生成公钥和私钥
    publicKey, privateKey = rsa.newkeys(1024)




    class rsaCrypt:
    def __init__(self, publickey=None, privatekey=None):
    self.publicKey = publickey # 公钥
    self.privateKey = privatekey # 私钥
    self.cipherText = ""
    self.decryptText = ""


    # 保存密钥
    def saveKey(self):
    with open('public.pem', 'wb') as f:
    f.write(self.publicKey.save_pkcs1())


    with open('private.pem', 'wb') as f:
    f.write(self.privateKey.save_pkcs1())


    # 导入密钥
    def getKey(self):
    with open('public.pem', 'r') as f:
    self.publicKey = rsa.PublicKey.load_pkcs1(f.read().encode())


    with open('private.pem', 'r') as f:
    self.privateKey = rsa.PrivateKey.load_pkcs1(f.read().encode())


    # 加密
    def encrypt(self, strText):
    self.cipherText = rsa.encrypt(strText.encode('utf-8'), self.publicKey)
    # 因为rsa加密时候得到的字符串不一定是'utf-8'字符集的,输出到终端或者保存时候可能存在问题
    # 所以这里统一把加密后的字符串转化为16进制字符串
    # print(b2a_hex(self.cipherText))
    strTemp = b2a_hex(self.cipherText).decode('utf-8')
    return strTemp


    # 解密
    def decrypt(self, strText):
    self.decryptText = rsa.decrypt(a2b_hex(strText), self.privateKey)
    # print(self.decryptText)
    strTemp = self.decryptText.decode('utf-8')
    return strTemp




    """---------------------------------------------
    主函数
    ---------------------------------------------"""
    if __name__ == '__main__':
    # rap加密解密,保存秘钥到pem文件
    rsaObject1 = rsaCrypt(publicKey, privateKey)
    rsaObject1.saveKey()
    text = 'HelloWord'
    strEncyText = rsaObject1.encrypt(text)
    strDecyText = rsaObject1.decrypt(strEncyText)
    print(strEncyText)
    print(strDecyText)

    # 从pem文件获取秘钥,解密
    rsaObject2 = rsaCrypt()
    rsaObject2.getKey()
    strDecyText = rsaObject2.decrypt(strEncyText)
    print(strDecyText)




    """
    55d431b9a68aa8d583a859dbe71d7a654243c39ed580cff03d81a6d76aee655bced121ece99abfd8638de92ab4a359554d206498d548798af9b2fc2c661e6bdc61f0e851238df0523e68da9041f902d8a2facd2cbfaa64ec21e70496351e3d2ad52b05c71d627deab97ac10f537302fccfcafa8a010a4dee0c3fac1cddeed0b5
    HelloWord
    HelloWord
    """


    关注上面微信公众号“捷创源科技每天获取技术干货让我们一起成长

    文章转载自捷创源科技,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论