资讯详情

【Python3】RSA公钥解密


**


以下是核心代码

根据老板的方法,增加了128方法增加了128长数据 https://blog.csdn.net/weixin_33910434/article/details/88672911

import rsa import base64    class DecryptByPublicKey:     """         模数因子先产生         然后生成rsa公钥         再使用rsa公钥解密传入的加密str     """     def __init__(self, encrypt_text, pub_key):         missing_padding = 4 - len(encrypt_text) % 4         if missing_padding:             encrypt_text  = '=' * missing_padding         self._encrypt_text = encrypt_text.replace(" ", " ")         self._pub_string_key = pub_key         # 用公钥字符串找出模数和因子         self._modulus = None   # 模数         self._exponent = None  # 因子         # 使用PublicKey(模数,因子)算出公钥         self._pub_rsa_key = None       def _gen_modulus_exponent(self, s):         # 解码字符串, 成功返回解码 模数和指数         b_str = base64.b64decode(s)         if len(b_str) < 162:             return False         hex_str = b_str.hex()         # 找到模数和指数的开始和结束         m_start = 29 * 2         e_start = 159 * 2         m_len = 128 * 2         e_len = 3 * 2         self._modulus = int(hex_str[m_start:m_start + m_len], 16) self._exponent = int(hex_str[e_start:e_start + e_len], 16) def _gen_rsa_pubkey(self): # 将pub key string 转换为 pub rsa key try: rsa_pubkey = rsa.PublicKey(self._modulus, self._exponent) # 赋值到_pub_rsa_key self._pub_rsa_key = rsa_pubkey.save_pkcs1() except Exception as e: raise e def decode(self): """ decrypt msg by public key """ public_key = rsa.PublicKey.load_pkcs1(self._pub_rsa_key) b64decoded_encrypt_text = base64.b64decode(self._encrypt_text) length = len(b64decoded_encrypt_text) length_max = 128 decryptDataText = [] data=b'' if length >= 128 : for i in range(0, length, length_max): encrypted = rsa.transform.bytes2int(b64decoded_encrypt_text[i:i + length_max]) decrypted = rsa.core.decrypt_int(encrypted, public_key.e, public_key.n) decrypted_bytes = rsa.transform.int2bytes(decrypted) data+=decrypted_bytes[decrypted_bytes.find(b'\x00')+1:] try: decryptDataText.append(data.decode()) except Exception as e: raise e else : encrypted = rsa.transform.bytes2int(b64decoded_encrypt_text) decrypted = rsa.core.decrypt_int(encrypted, public_key.e, public_key.n) decrypted_bytes = rsa.transform.int2bytes(decrypted) try: decryptDataText.append(decrypted_bytes[decrypted_bytes.find(b'\x00')+1:].decode()) except Exception as e: raise e if decryptDataText : return "".join(decryptDataText) else : return 'null' def decrypt(self): """ 先产生模数因子 然后生成rsa公钥 再使用rsa公钥去解密 """ self._gen_modulus_exponent(self._pub_string_key) self._gen_rsa_pubkey() ret = self.decode() return ret if __name__ == "__main__": pub_key = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChGYdKQ7b9Gjp6HZI3u7LjAKeAdoMVOh7ZroHaICi1l2dhMGiOwlZv8SFr6IUPJJIGnkA2cfbv3jECwJmfu1sBNxuoKp32sLmmbDiea7mgBbWJSB1NeDVg5j1479MKJGXNsYDFrgfdIaN3tFOvCTKXM1xkwvEiL8GtMF7UxO+xOQIDAQAB' encrypt_text = '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' # encrypt_text 是被私钥加密后的密文 result = DecryptByPublicKey(encrypt_text,pub_key).decrypt() print(result) 

标签: gwk40温度传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台