Java转Python实现RSA加密:RSA公钥传递及加密函数等效改写咨询
RSA加密Java转Python实现指南
前置依赖
安装加密工具库:pip install pycryptodome
1. 公钥格式适配
你提供的Java Sun RSA公钥包含两个核心参数,直接使用这两个参数即可构造Python可识别的RSA公钥对象:
- modulus:模数,大整数格式
- public exponent:公钥指数,默认多为65537,按你实际拿到的数值填写即可
公钥构造代码示例:
from Crypto.PublicKey import RSA # 替换为你实际拿到的参数值 modulus_str = "5438...." # 如果modulus是十六进制字符串就用int(modulus_str, 16)转整数,十进制直接用int(modulus_str) modulus_int = int(modulus_str, 16) public_exponent = 12237 # 构造Python可用的公钥对象 pub_key = RSA.construct((modulus_int, public_exponent))
2. 等效加密函数实现
注意:Java中Cipher.getInstance("RSA")默认使用RSA/ECB/PKCS1Padding填充,Python侧必须对齐该填充规则,否则加密结果无法正常解密。
完整加密代码:
from Crypto.Cipher import PKCS1_v1_5 import base64 def encrypt_message(random_token: str, public_key: RSA.RsaKey) -> str: # 初始化加密器,使用PKCS1v1.5填充对齐Java默认逻辑 cipher = PKCS1_v1_5.new(public_key) # 字符串转字节数组,编码规则和Java侧randomToken.getBytes()的编码保持一致即可 encrypt_bytes = cipher.encrypt(random_token.encode("utf-8")) # Base64编码后返回字符串 return base64.b64encode(encrypt_bytes).decode("utf-8")
调用示例
random_token = "你要加密的随机令牌字符串" encrypted_result = encrypt_message(random_token, pub_key) print(encrypted_result)
注意事项
- 如果Java侧
randomToken.getBytes()指定了非UTF-8编码,Python侧encode的编码参数要同步修改 - 若解密失败,优先核对填充规则、公钥参数、字符串编码三个节点是否对齐
内容的提问来源于stack exchange,提问作者Callum
相关产品推荐
相关产品推荐

