美文网首页
Python-RSA加密实现

Python-RSA加密实现

作者: Bug2Coder | 来源:发表于2019-10-08 15:02 被阅读0次
    实现RSA不对称加密算法的大数据加密

    1.加密模块:传入参数:需要加密的字节数据,返回数据:加密后的字节数据
    2.解密模块:传入参数:同加密值下加密后的字节数据,返回数据:解密后的字符串

    
    import rsa.common
    import rsa
    
    
    class Rsa_mes(object):
        def __init__(self):
            self.keys = rsa.newkeys(256)
    
        # rsa 加密
        def rsa_encrypt_bytes(self, bytes_str):
            if not isinstance(bytes_str, bytes):
                return None
    
            # 导入rsa库
            pubkey = rsa.PublicKey(self.keys[1].n, self.keys[1].e)
    
            key_length = rsa.common.byte_size(self.keys[1].n)
            max_msg_length = key_length - 11
    
            count = len(bytes_str) // max_msg_length
            if len(bytes_str) % max_msg_length > 0:
                count = count + 1
    
            cry_bytes = b''
    
            # rsa加密要以max_msg_length分组, 每组分别加密(加密的数据长度为key_length, 解密时每key_length长度解密然后相加)
            for i in range(count):
                start = max_msg_length * i
                size = max_msg_length
                content = bytes_str[start: start + size]
    
                # rsa 分组 加密
                crypto = rsa.encrypt(content, pubkey)
    
                cry_bytes = cry_bytes + crypto
    
            return cry_bytes
    
        # rsa 解密, bytes_string是rsa_encrypt_hex, rsa_encrypt_bytes的返回值
        def rsa_decrypt(self, bytes_string):
            pri_key = rsa.PrivateKey(self.keys[1].n, self.keys[1].e, self.keys[1].d, self.keys[1].p, self.keys[1].q)
    
            key_length = rsa.common.byte_size(self.keys[1].n)
            if len(bytes_string) % key_length != 0:
                # 如果数据长度不是key_length的整数倍, 则数据是无效的
                return None
    
            count = len(bytes_string) // key_length
            d_cty_bytes = b''
    
            # 分组解密
            for i in range(count):
                start = key_length * i
                size = key_length
                content = bytes_string[start: start + size]
    
                # rsa 分组 解密
                d_crypto = rsa.decrypt(content, pri_key)
    
                d_cty_bytes = d_cty_bytes + d_crypto
    
            return d_cty_bytes.decode("utf-8")
    
    
    rs_mes = Rsa_mes()
    a = "hello"
    res_en = rs_mes.rsa_encrypt_bytes(bytes_str=a.encode("utf-8"))
    print(res_en)
    res_de = rs_mes.rsa_decrypt(res_en).decode("utf-8")
    print(res_de)
    

    扩展:
    1、加密后的字节转换为字符串:
    res_byte = rsa_mes.encrypt_bytes(bytes_str=a.encode("utf-8")) # 加密明文
    res_str = '{}'.format(res_byte) # 密文转换为字符串
    2、转换后的字符串解密
    res_byte = eval(res_str) # 获得真实的字节类型
    res = rs_mes.rsa_decrypt(res_byte) # 解密,得到明文

    相关文章

      网友评论

          本文标题:Python-RSA加密实现

          本文链接:https://www.haomeiwen.com/subject/jwubpctx.html