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

如何在Python中实现微软API要求的RSA加密OTP提交?

问题分析与解决方向

首先,不需要直接手动转译整个JS加密逻辑,大概率是你使用Python rsa模块时的参数或填充方式和微软JS加密逻辑不匹配导致的,核心要对齐两者的加密参数细节:

  • 先明确JS加密的具体参数
    你提到的“特定PKCSv2填充”通常指RSA-OAEP(PKCS#1 v2.1)填充,需要确认JS代码里的关键参数:

    • 哈希算法(比如SHA-1、SHA-256)
    • MGF1函数使用的哈希算法(通常和主哈希一致,但也可能不同)
    • 是否设置了自定义Label参数
    • OTP字符串的编码方式(比如UTF-8、ASCII)
  • 检查Python rsa模块的使用是否匹配
    Python的rsa模块默认行为可能和JS逻辑不符:

    1. 若JS用的是OAEP填充,rsa.encrypt默认是PKCS#1 v1.5填充,必须改用rsa.pkcs1.encrypt_oaep方法,并指定对应的哈希算法和Label:
      import rsa
      from rsa import pkcs1
      
      # 假设已加载好微软提供的公钥
      otp = "你的OTP字符串"
      encrypted_data = pkcs1.encrypt_oaep(
          otp.encode("utf-8"),
          public_key=public_key,
          hash_method=rsa.hash.SHA256,  # 匹配JS的哈希算法
          label=b""  # 若JS有自定义Label则对应传入,否则为空字节
      )
      # 转成API要求的格式(比如base64或十六进制)
      encrypted_base64 = encrypted_data.hex()  # 或base64.b64encode(encrypted_data).decode()
      
    2. 如果rsa模块的OAEP支持无法满足JS的参数(比如某些特殊哈希算法),可以改用更灵活的cryptography库来实现:
      from cryptography.hazmat.primitives.asymmetric import padding
      from cryptography.hazmat.primitives import hashes
      from cryptography.hazmat.primitives import serialization
      
      # 加载公钥(假设是PEM格式)
      with open("public_key.pem", "rb") as f:
          public_key = serialization.load_pem_public_key(
              f.read()
          )
      
      otp = "你的OTP字符串"
      encrypted_data = public_key.encrypt(
          otp.encode("utf-8"),
          padding.OAEP(
              mgf=padding.MGF1(algorithm=hashes.SHA256()),
              algorithm=hashes.SHA256(),
              label=None  # 匹配JS的Label设置
          )
      )
      
  • 验证加密结果一致性
    用同一OTP、同一公钥,分别用JS和Python加密,对比加密后的字节流(或base64编码值)。如果不一致,逐步排查每个参数:编码方式、哈希算法、填充类型、Label值,直到参数完全对齐。

  • 何时需要手动转译?
    只有当JS的加密逻辑包含非标准的自定义修改(比如对PKCS#1 v2.1填充规则做了额外字节处理)时,才需要手动转译逻辑。但微软官方API的加密逻辑通常遵循标准,所以优先排查参数对齐问题。

内容的提问来源于stack exchange,提问作者some_dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:10:23