• ras 加密及解密


    rsa 对数据进行加密和解密

    #!/usr/bin/env python
    # coding=utf-8
    
    """
    pip3 install rsa
    """
    
    import rsa
    import base64
    
    # ######### 1. 生成公钥私钥 #########
    pub_key_obj, priv_key_obj = rsa.newkeys(1024) # 128 - 11 = 117
    # 公钥字符串
    pub_key_str = pub_key_obj.save_pkcs1()
    pub_key_code = base64.standard_b64encode(pub_key_str)
    print(pub_key_code)
    # 私钥字符串
    priv_key_str = priv_key_obj.save_pkcs1()
    priv_key_code = base64.standard_b64encode(priv_key_str)
    print(priv_key_code)
    
    
    
    # # ######### 2. 用公钥加密 #########
    def encrypt(pub_key_code,value):
        """
        :param pub_key_code: 公钥
        :param value: 要加密的数据
        :return: 成功加密的数据
        """
        key_str = base64.standard_b64decode(pub_key_code)
        pk = rsa.PublicKey.load_pkcs1(key_str)
        result = rsa.encrypt(value.encode('utf-8'), pk)
        return result
    
    data = encrypt(pub_key_code,'liyp')
    print(data)
    
    
    # # ######### 3. 用私钥解密 #########
    def decrypt(priv_key_code,value):
        """
        :param priv_key_code: 私钥
        :param value: 要解密的数据
        :return: 成功解密的数据
        """
        key_str = base64.standard_b64decode(priv_key_code)
        pk = rsa.PrivateKey.load_pkcs1(key_str)
        val = rsa.decrypt(value, pk)
        return val
    
    origin = decrypt(priv_key_code,data)
    print(origin.decode('utf-8'))
    

    但是对长字符串(超过117位的字符串进行加密)就会出现异常,需要对长字符串进行切割,进行加密然后将加密的数据进行拼接。解密也是如此 

    # ######### 1. 生成公钥私钥 #########
    pub_key_obj, priv_key_obj = rsa.newkeys(1024) # 128 - 11 = 117
    # 公钥字符串
    pub_key_str = pub_key_obj.save_pkcs1()
    pub_key_code = base64.standard_b64encode(pub_key_str)
    print(pub_key_code)
    # 私钥字符串
    priv_key_str = priv_key_obj.save_pkcs1()
    priv_key_code = base64.standard_b64encode(priv_key_str)
    print(priv_key_code)
    
    
    value = 'liyp' * 30
    # # ######### 2. 用公钥加密 #########
    def big_encrypt(pub_key_code,value):
        """
        :param pub_key_code: 公钥
        :param value: 要加密的数据
        :return: 成功加密的数据
        """
        big_list = []
        key_str = base64.standard_b64decode(pub_key_code)
        pk = rsa.PublicKey.load_pkcs1(key_str)
        for item in range(0,len(value),117):
            chunk = value[item:item+117]
            result = rsa.encrypt(chunk.encode('utf-8'), pk)
            big_list.append(result)
        return b''.join(big_list)
    
    data = big_encrypt(pub_key_code,value)
    print(data)
    
    # ######### 3. 用私钥解密 #########
    def big_decrypt(priv_key_code,value):
        """
        :param priv_key_code: 私钥
        :param value: 要解密的数据
        :return: 成功解密的数据
        """
        big_list = []
        key_str = base64.standard_b64decode(priv_key_code)
        pk = rsa.PrivateKey.load_pkcs1(key_str)
        for item in range(0,len(value),128):
            chunk = value[item:item+128]
            val = rsa.decrypt(chunk, pk)
            big_list.append(val)
        return b''.join(big_list)
    
    ret = big_decrypt(priv_key_code,data)
    print(ret.decode('utf-8'))
    

      

     

  • 相关阅读:
    springboot: 使web项目支持jsp
    springboot: 集成freemark模板引擎
    Springboot的优点和实现
    Spring的两种动态代理:Jdk和Cglib 的区别和实现
    JAVA单例模式:懒汉式,饿汉式
    java的内存管理 对象的分配与释放
    JAVA反射调用方法
    JAVA内置注解 基本注解
    图——图的定义与操作
    树——二叉树的线索化
  • 原文地址:https://www.cnblogs.com/happlyp/p/10617793.html
Copyright © 2020-2023  润新知