赞
踩
使用python进行公钥加密私钥解密,网上方法很多,这里就不再介绍了。 因公司项目测试需要,要使用rsa公钥加密后的数据请求服务器,服务器使用私钥解密,并将响应使用私钥加密后返回,再使用公钥进行解密,对响应结果进行校验。**
根据这位大佬的方法增加了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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。