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
相关产品推荐
相关产品推荐

