1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/fudiwei-DotNetCore.SKIT.FlurlHttpClient.Wechat

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Basic_ResponseSensitiveDataDecryption.md 2.1 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Fu Diwei Отправлено 07.02.2024 06:22 c774af7

如何解密响应中的敏感数据?


请先自行阅读:

《微信支付开发者文档 - 证书/密钥/签名介绍:API v3 密钥》

《微信支付开发者文档 - 开发指南:敏感信息加解密》


解密流程

对于部分接口响应返回的敏感信息,微信商户平台可能会需要使用以下方式进行解密:

  • 使用商户私钥基于 RSA 算法解密。

  • 使用商户 API v3 密钥基于 AES-GCM 算法解密。

开发者利用本库提供的 RSAUtilityAESUtility 工具类自行解密相关字段。下面给出一个使用 RSAUtility 工具类解密数据的示例代码:

string cipherText = "待解密的数据";
string privateKey = "PKCS#8 私钥内容";
/* 通过私钥解密数据 */
string plainText = RSAUtility.DecryptWithECB(privateKey, cipherText);

此外,本库还封装了直接解密响应中敏感信息字段的扩展方法,下面给出一个示例代码:

var request = new QueryCertificatesRequest();
var response = await client.ExecuteQueryCertificatesAsync(request);

Console.WriteLine("before: {0}", response.CertificateList.First().EncryptCertificate.CipherText); // 此时仍是密文
client.DecryptResponseSensitiveProperty(response);
Console.WriteLine("after: {0}", response.CertificateList.First().EncryptCertificate.CipherText); // 此时已是明文

如果你希望本库在响应后能自动完成这项操作,你可以在构造得到 WechatTenpayClient 对象时指定自动化参数:

var options = new WechatTenpayClientOptions()
{
    AutoDecryptResponseSensitiveProperty = true
};
var client = WechatTenpayClientBuilder.Create(options).Build();

这样,本库会在实际收到响应后自动为你调用 DecryptResponseSensitiveProperty() 方法。

此外,该扩展方法使用反射、并依赖 WechatTenpaySensitiveAttributeWechatTenpaySensitivePropertyAttribute 特性,相比较手动解密,可能会存在一定的性能开销。

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/fudiwei-DotNetCore.SKIT.FlurlHttpClient.Wechat.git
git@api.gitlife.ru:oschina-mirror/fudiwei-DotNetCore.SKIT.FlurlHttpClient.Wechat.git
oschina-mirror
fudiwei-DotNetCore.SKIT.FlurlHttpClient.Wechat
fudiwei-DotNetCore.SKIT.FlurlHttpClient.Wechat
main