You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:36:03