• Python使用RSA加解密分段2048位


    1、安装

    pip install pycryptodome

    2、代码

    from Crypto import Random
    from Crypto.PublicKey import RSA
    from Crypto.Cipher import PKCS1_v1_5 as PKCS1_cipher
    import base64
    
    
    def test_01():
        random_generator = Random.new().read
        rsa = RSA.generate(2048, random_generator)
        # 生成私钥
        private_key = rsa.exportKey()
        # print(private_key.decode('utf-8'))
        # print('-' * 15 + '分割线' + '-' * 15)
        with open('privatekey.txt', 'wb') as f:
            f.write(private_key)
        # 生成公钥
        public_key = rsa.public_key().exportKey()
        # print(public_key.decode('utf-8'))
        with open('publickey.txt', 'wb') as f:
            f.write(public_key)
    
    
    # 加密
    def rsa_encrypt(data, length=200):
        # 导入公钥
        with open('publickey.txt') as f:
            # 拼接公钥的前后缀
            # key = '-----BEGIN RSA PRIVATE KEY-----\n' + f.read() + '\n-----END RSA PRIVATE KEY-----'
            key = f.read()
            # print(key)
            # 使用 RSA 的 importKey() 方法对(从文件中读取的)公钥字符串进行处理,处理成可用的加密公钥。
            pub_key = RSA.importKey(str(key))
            # 实例化一个加密对象 cipher ,传入的参数是公钥,通过 cipher 的 encrypt() 方法对信息进行加密。
            cipher = PKCS1_cipher.new(pub_key)
        # 对传入的数据data进行编码,
        data = data.encode()
        if len(data) <= length:
            # 对编码的数据进行加密,并通过base64进行编码
            result = base64.b64encode(cipher.encrypt(data))
        else:
            rsa_text = []
            # 对编码后的数据进行切片,原因:加密长度不能过长
            for i in range(0, len(data), length):
                cont = data[i:i + length]
                # 对切片后的数据进行加密,并新增到text后面
                rsa_text.append(cipher.encrypt(cont))
            # 加密完进行拼接
            cipher_text = b''.join(rsa_text)
            # base64进行编码
            result = base64.b64encode(cipher_text)
        return result.decode()
    
    
    # 解密
    def rsa_deencrypt(data):
        with open('privatekey.txt') as f:
            key = f.read()
            # 使用 RSA 的 importKey() 方法对(从文件中读取的)私钥字符串进行处理,处理成可用的加密公钥。
            pub_key = RSA.importKey(str(key))
            # 实例化一个加密对象 cipher ,传入的参数是私钥,通过 cipher 的 encrypt() 方法对信息进行加密。
            cipher = PKCS1_cipher.new(pub_key)
        # 对传入的数据data进行解码
        data = base64.b64decode(data)
        # 解密
        result = cipher.decrypt(data, 0)
        return result.decode('utf-8')
    
    
    if __name__ == '__main__':
        test_01()
        c = rsa_encrypt("hello")
        print(c)
        print(rsa_deencrypt(c))

    加密时候 100 是1024 ,200是2048

    摘抄自

    https://blog.csdn.net/m0_55415810/article/details/119757746

  • 相关阅读:
    Mongodb在windows下的安装和启动
    git操作的常用命令
    删除smartygit的配置文件
    注册树模式
    关于js的一些基础知识点
    关于mysql的初步学习 (五)
    关于mysql的初步学习 (四)
    关于mysql的初步学习 (三)
    关于mysql的初步学习 (二)
    关于数据库建表时的有趣实例--关键字重复
  • 原文地址:https://www.cnblogs.com/xuweiqiang/p/16357846.html
Copyright © 2020-2023  润新知