Files
DotNetCore.SKIT.FlurlHttpCl…/docs/WechatTenpayV3/Basic_ResponseSensitiveDataDecryption.md

54 lines
2.2 KiB
Markdown
Raw Normal View History

2021-07-27 18:37:38 +08:00
## 如何解密响应中的敏感数据?
2021-05-10 15:30:00 +08:00
---
> 请先自行阅读:
>
2025-11-04 15:52:21 +08:00
> [《微信支付文档中心 - 开发须知 / 开发参数申请和配置 / 配置 APIv3 密钥》](https://pay.weixin.qq.com/doc/v3/merchant/4012072195)
2021-05-10 15:30:00 +08:00
>
2025-11-04 15:52:21 +08:00
> [《微信支付文档中心 - 开发须知 / 如何加解密敏感字段 / 如何使用 API 证书解密敏感字段》](https://pay.weixin.qq.com/doc/v3/merchant/4013053265)
2021-05-10 15:30:00 +08:00
2021-11-25 21:15:54 +08:00
---
### 解密流程
对于部分接口响应返回的敏感信息,微信商户平台可能会需要使用以下方式进行解密:
2021-05-10 15:30:00 +08:00
2021-11-25 21:15:54 +08:00
- 使用商户私钥基于 RSA 算法解密。
2021-05-10 15:30:00 +08:00
2022-11-10 01:55:57 +08:00
- 使用商户 API v3 密钥基于 AES-GCM 算法解密。
2021-05-10 15:30:00 +08:00
2021-11-25 21:15:54 +08:00
开发者利用本库提供的 `RSAUtility``AESUtility` 工具类自行解密相关字段。下面给出一个使用 `RSAUtility` 工具类解密数据的示例代码:
```csharp
2022-05-09 20:31:03 +08:00
string cipherText = "待解密的数据";
2021-11-25 21:15:54 +08:00
string privateKey = "PKCS#8 私钥内容";
/* 通过私钥解密数据 */
2022-05-09 20:31:03 +08:00
string plainText = RSAUtility.DecryptWithECB(privateKey, cipherText);
2021-11-25 21:15:54 +08:00
```
2021-05-10 15:30:00 +08:00
2021-11-25 21:15:54 +08:00
此外,本库还封装了直接解密响应中敏感信息字段的扩展方法,下面给出一个示例代码:
2021-05-10 15:30:00 +08:00
```csharp
2023-03-09 21:45:57 +08:00
var request = new QueryCertificatesRequest();
2021-05-10 15:30:00 +08:00
var response = await client.ExecuteQueryCertificatesAsync(request);
2022-05-09 20:31:03 +08:00
Console.WriteLine("before: {0}", response.CertificateList.First().EncryptCertificate.CipherText); // 此时仍是密文
2021-11-25 21:15:54 +08:00
client.DecryptResponseSensitiveProperty(response);
2022-05-09 20:31:03 +08:00
Console.WriteLine("after: {0}", response.CertificateList.First().EncryptCertificate.CipherText); // 此时已是明文
2021-05-10 15:30:00 +08:00
```
2021-11-25 21:15:54 +08:00
2022-05-09 20:31:03 +08:00
如果你希望本库在响应后能自动完成这项操作,你可以在构造得到 `WechatTenpayClient` 对象时指定自动化参数:
2021-11-25 21:15:54 +08:00
```csharp
2022-05-06 20:29:27 +08:00
var options = new WechatTenpayClientOptions()
{
AutoDecryptResponseSensitiveProperty = true
2022-01-11 17:52:01 +08:00
};
2024-02-07 11:22:05 +08:00
var client = WechatTenpayClientBuilder.Create(options).Build();
2021-11-25 21:15:54 +08:00
```
这样,本库会在实际收到响应后自动为你调用 `DecryptResponseSensitiveProperty()` 方法。
2021-12-03 16:55:29 +08:00
此外,该扩展方法使用反射、并依赖 `WechatTenpaySensitiveAttribute``WechatTenpaySensitivePropertyAttribute` 特性,相比较手动解密,可能会存在一定的性能开销。