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

如何在C#中实现Adyen银行卡数据加密?求推荐相关类库

Adyen银行卡信息加密的C#实现方案

一、现成的C#类库:Adyen官方SDK

Adyen官方提供了正式的C# SDK,内置卡片加密功能,直接通过NuGet安装Adyen包即可使用,无需手动处理加密细节:

using Adyen;
using Adyen.Model.Encrypt;

var client = new Client();
var encryptService = new EncryptService(client);

var card = new Card
{
    Number = "4111111111111111",
    ExpiryMonth = "12",
    ExpiryYear = "2030",
    Cvc = "123"
};

// 传入你的Adyen公钥,SDK会自动生成符合格式的加密字符串
var encryptionResult = encryptService.Encrypt(card, "your_adyen_public_key");
string encryptedCardData = encryptionResult.EncryptedCard;

二、自行实现Adyen卡片加密(不依赖官方SDK)

核心错误纠正

你之前用SHA256+Base64的思路完全错误:Adyen卡片加密用的是RSA非对称加密(可逆,Adyen用私钥解密),而SHA256是哈希算法(不可逆,仅用于校验),这也是你生成的字符串过短且无效的原因。

自行实现步骤

  1. 解析Adyen公钥
    Adyen公钥格式类似pub_0123456789abcdef...,需要先转换为C# RSA对象可识别的格式:
using System.Security.Cryptography;
using System.Text;

public static RSACryptoServiceProvider LoadAdyenPublicKey(string adyenPublicKey)
{
    // 移除前缀并转换为标准PEM格式
    var keyContent = adyenPublicKey.Replace("pub_", "");
    var pem = $"-----BEGIN PUBLIC KEY-----\n{Convert.ToBase64String(Convert.FromBase64String(keyContent), Base64FormattingOptions.InsertLineBreaks)}\n-----END PUBLIC KEY-----";
    
    var rsa = new RSACryptoServiceProvider();
    rsa.FromXmlString(RsaPemConverter.PemToXml(pem));
    return rsa;
}

// 辅助方法:PEM转XML格式(C# RSA依赖XML配置)
public static class RsaPemConverter
{
    public static string PemToXml(string pem)
    {
        var cleanPem = pem.Replace("-----BEGIN PUBLIC KEY-----", "")
                          .Replace("-----END PUBLIC KEY-----", "")
                          .Replace("\n", "");
        var keyBytes = Convert.FromBase64String(cleanPem);
        
        using var rsa = RSA.Create();
        rsa.ImportSubjectPublicKeyInfo(keyBytes, out _);
        return rsa.ToXmlString(false);
    }
}
  1. 构造标准卡片JSON
    必须严格使用Adyen要求的小写字段名,字段包括number(卡号)、expiryMonth(两位月份)、expiryYear(四位年份)、cvc(安全码):
var cardData = new
{
    number = "4111111111111111",
    expiryMonth = "12",
    expiryYear = "2030",
    cvc = "123"
};
string jsonCardData = Newtonsoft.Json.JsonConvert.SerializeObject(cardData);
byte[] cardDataBytes = Encoding.UTF8.GetBytes(jsonCardData);
  1. 执行RSA加密
    必须使用OAEP填充模式+SHA256哈希,这是Adyen的强制要求:
var rsa = LoadAdyenPublicKey("your_adyen_public_key");
byte[] encryptedBytes = rsa.Encrypt(cardDataBytes, RSAEncryptionPadding.OaepSHA256);
string encryptedBase64 = Convert.ToBase64String(encryptedBytes);
  1. 拼接Adyen格式前缀
    格式为adyenjs_0_1_XX[加密内容],其中XX是公钥对应的版本号(比如公钥是pub_32_...则版本为32,需和Adyen提供的公钥版本一致):
string finalEncryptedData = $"adyenjs_0_1_32{encryptedBase64}";

关键注意事项

  • 公钥版本号必须与Adyen提供的公钥匹配,否则加密结果无效。
  • JSON字段名必须严格小写,不能自定义字段名。
  • 必须使用OAEP填充+SHA256哈希,不能替换为其他加密参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:53:32