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

Wallester API加密CVV解密失败问题求助

解密Wallester API加密CVV时的"Incorrect decryption"错误排查

以下是针对你遇到的解密失败问题的具体排查和解决步骤:

  • 修正加密数据的标识头
    你当前代码处理的是-----BEGIN CardNumber MESSAGE-----标识,但解密的是CVV数据,Wallester的加密CVV通常使用-----BEGIN CVV MESSAGE-----作为标识头/尾。标识不匹配会导致base64解码后的数据无效,直接触发解密错误。
    调整代码中的标识替换逻辑:

    encoded_cvv = """-----BEGIN CVV MESSAGE-----<base64 encoded string>-----END CVV MESSAGE-----"""
    
    b64_decoded = base64.b64decode(
        encoded_cvv.replace("\n", "").
        replace("-----BEGIN CVV MESSAGE-----", "").
        replace("-----END CVV MESSAGE-----", "")
    )
    
  • 验证密钥配对正确性
    确保你使用的private_key.pem是与Wallester提供的CVV加密专用公钥配对生成的私钥。密钥不匹配是解密失败的核心原因之一,可通过对比模数验证:

    # 导入Wallester提供的CVV加密公钥
    public_key = RSA.import_key(open("wallester_cvv_public_key.pem").read())
    private_key = RSA.import_key(open("private_key.pem").read())
    
    # 输出True则说明密钥配对正确
    print(public_key.n == private_key.n)
    
  • 指定匹配的哈希算法
    PKCS1_OAEP默认使用SHA-1,但Wallester大概率采用SHA-256作为哈希算法。哈希算法不匹配会导致解密时的验证失败,需显式指定:

    from Crypto.Hash import SHA256
    
    decryptor = PKCS1_OAEP.new(private_key, hashAlgo=SHA256)
    
  • 检查base64解码完整性
    清理加密字符串后,确认剩余内容是完整的base64编码(无空格、截断或特殊字符)。可打印解码后数据的长度:2048位RSA密钥对应的加密数据长度应为256字节,长度不符则说明字符串处理有误。

  • 确认加密数据有效性
    重新从API获取加密CVV,确保数据未在传输过程中被截断、篡改或编码错误。


修正后的完整代码示例

from Crypto.Cipher import PKCS1_OAEP
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA256
import base64

# 替换为实际获取的加密CVV字符串
encoded_cvv = """-----BEGIN CVV MESSAGE-----<your actual base64 encoded CVV>-----END CVV MESSAGE-----"""

# 清理并解码base64数据
cleaned_cvv = encoded_cvv.replace("\n", "").replace("-----BEGIN CVV MESSAGE-----", "").replace("-----END CVV MESSAGE-----", "")
b64_decoded = base64.b64decode(cleaned_cvv)

# 导入配对私钥
private_key = RSA.import_key(open("private_key.pem").read())

# 初始化SHA-256的PKCS1_OAEP解密器
decryptor = PKCS1_OAEP.new(private_key, hashAlgo=SHA256)

# 执行解密
try:
    cvv = decryptor.decrypt(b64_decoded).decode('utf-8')
    print(f"解密后的CVV: {cvv}")
except ValueError as e:
    print(f"解密失败: {e}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:42:09