官方暂时没有维护应答与通知签名的验证C#示例,找了些资料被困扰了一天终于调试通了,贴出来下 。

此类提供两个方法:

1.敏感信息加密,如身份证、银行卡号。(特约商户进件接口需要);

2.应答与通知签验签(商户必须验证回调的签名,以确保回调是由微信支付发送,避免劫持修改数据。)。

/// <summary>

/// 使用微信支付平台证书公钥加密验签

/// https://wechatpay-api.gitbook.io/wechatpay-api-v3/qian-ming-zhi-nan-1/qian-ming-yan-zheng

/// </summary>

public class WXPlatform

{

public string PublicKey { get; private set; }

private byte[] _publicKeyBytes { get; set; }

/// <summary>

/// 构造方法

/// </summary>

/// <param name="publickey">-----BEGIN CERTIFICATE----- 开头的string,转为bytes->不需要每次都去</param>

public WXPlatform(string publickey)

{

this.PublicKey = publickey;

this._publicKeyBytes = Encoding.UTF8.GetBytes(publickey);

}

/// <summary>

/// 最终提交请求时,需对敏感信息加密,如身份证、银行卡号。

/// 加密算法是RSA,使用从接口下载到的公钥进行加密,非后台下载到的私钥。

/// </summary>

/// <param name="text">要加密的明文</param>

/// <param name="publicKey">  </param>

/// <returns></returns>

public string Encrypt(string text)

{

var x509 = new X509Certificate2(this._publicKeyBytes);

using (var rsa = (RSACryptoServiceProvider)x509.PublicKey.Key)

{

var buff = rsa.Encrypt(Encoding.UTF8.GetBytes(text), true);

return Convert.ToBase64String(buff);

}

}

/// <summary>

/// 验证签名

/// </summary>

/// <param name="signedString">私钥加密串-Wechatpay-Signature</param>

/// <param name="signSourceString">验签名串-应答时间戳\n应答随机串\n应答报文主体\n</param>

/// <returns></returns>

public bool VerifySign(string signedString, string signSourceString)

{

var x509 = new X509Certificate2(this._publicKeyBytes);

using (var rsa = (RSACryptoServiceProvider)x509.PublicKey.Key)

{

using (var sha256 = new SHA256CryptoServiceProvider())

{

var b = rsa.VerifyData(Encoding.UTF8.GetBytes(signSourceString), sha256, Convert.FromBase64String(signedString));

return b;

}

}

}

}

在微信社区发布的地址:https://developers.weixin.qq.com/community/develop/article/doc/000aca9b4906480daef9a62215b413

【C#】WechatPay-API-v3 使用平台证书加密内容与应答|通知验签(SHA256 with RSA)的更多相关文章

  1. Java中的微信支付(2):API V3 微信平台证书的获取与刷新

    1. 前言 在Java中的微信支付(1):API V3版本签名详解一文中胖哥讲解了微信支付V3版本API的签名,当我方(你自己的服务器)请求微信支付服务器时需要根据我方的API证书对参数进行加签,微信 ...

  2. Java使用数字证书加密通信(加解密/加签验签)

    本文中使用的Base64Utils.java可参考:http://www.cnblogs.com/shindo/p/6346618.html 证书制作方法可参考:http://www.cnblogs. ...

  3. PHP 之用证书对数据进行签名、验签、加密、解密

    /** * 对数据进行签名 * $data = 'If you are still new to things, we’ve provided a few walkthroughs to get yo ...

  4. SHA256withRSA证书签名,私钥签名/公钥验签

    证书签名 package test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundE ...

  5. js rsa sign使用笔记(加密,解密,签名,验签)

    你将会收获: js如何加密, 解密 js如何签名, 验签 js和Java交互如何相互解密, 验签(重点) 通过谷歌, 发现jsrsasign库使用者较多. 查看api发现这个库功能很健全. 本文使用方 ...

  6. RSA加密、解密、签名、验签的原理及方法

    一.RSA加密简介 RSA加密是一种非对称加密.可以在不直接传递密钥的情况下,完成解密.这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险.是由一对密钥来进行加解密的过程,分别称为公钥和私 ...

  7. SoapUI接口测试-验签值处理-调用java的加密jar包

    转载自:https://www.jianshu.com/p/7c672426a165 一. 背景: 调用接口时有个请求参数是对请求入参按一定规则进行加密生成的验签值,每次不同参数的请求生成唯一的验签值 ...

  8. 密码基础知识(2)以RSA为例说明加密、解密、签名、验签

    密码基础知识(1)https://www.cnblogs.com/xdyixia/p/11528572.html 一.RSA加密简介 RSA加密是一种非对称加密.是由一对密钥来进行加解密的过程,分别称 ...

  9. php 品牌全车零件订购平台( 带采集数据 及 账号自动登陆【已绕过https证书加密】,php源码 ,QQ: 876635409 )

    php捷豹路虎 品牌全车零件订购平台  ( 带采集数据 及 账号自动登陆[已绕过https证书加密],php源码 ,QQ: 876635409 [由于咨询用户太多,请备注:汽车配件]) 一.php+m ...

随机推荐

  1. LeetCode No.157,158,159

    No.157 Read 用 Read4 读取 N 个字符 题目 给你一个文件,并且该文件只能通过给定的 read4 方法来读取,请实现一个方法使其能够读取 n 个字符. read4 方法: API r ...

  2. android 获得存储设备状态

    1.获取存储器总大小,可用大小 File path= Environment.getExternalStorageDirectory();StatFs fs = new StatFs(path.get ...

  3. 【Java杂货铺】JVM#Class类结构

    代码编译的结果从本地机器码转为字节码,是储存格式发展的一小步,却是编程语言的一大步.--<深入理解Java虚拟机> 计算机只认识0和1.所以我们写的编程语言只有转义成二进制本地机器码才能让 ...

  4. MySQL出现错误1030-Got error 28 from storage engine

    磁盘空间不足引起的!1030-Got error 28 from storage engine df -h 清理空间

  5. Qt的窗口如何显示在spi屏幕上

    问题:我们可以将qt移植到H3上,但是如果要将窗口通过spi屏进行显示应该怎么做呢,和framebuffer又有什么关系? 这里只说一下qt在spi屏上显示的技术原理,具体的实现还需要自己努力. 一. ...

  6. JSP中request对象常用方法汇总

    setAttribute(String name,Object):设置名字为name的request的参数值 getAttribute(String name):返回由name指定的属性值 getAt ...

  7. 2019-2020-1 20199324《Linux内核原理与分析》第七周作业

    第六章 进程的描述和进程的创建 知识点总结 进程的描述 操作系统内核实现操作系统的三大管理功能以及对应的抽象概念: 进程管理(最核心)-- 进程 内存管理 -- 虚拟内存 文件系统 -- 文件 进程是 ...

  8. Spring Boot 2.x 整合 Redis最佳实践

    一.前言 在前面的几篇文章中简单的总结了一下Redis相关的知识.本章主要讲解一下 Spring Boot 2.0 整合 Redis.Jedis 和 Lettuce 是 Java 操作 Redis 的 ...

  9. day29-struct模块解决黏包问题

    #struct模块可以把一个数据类型,例如数字int,转化成固定长度(4个字节)的bytes.int转为4个bytes. #在大量传输数据之前先告诉接收端即将接收数据的大小,方可解决黏包问题: #利用 ...

  10. cnn可视化 感受野(receptive field)可视化

    网址: https://befreeroad.github.io/#/editor 参考: http://ethereon.github.io/netscope/#/editor 在此基础上添加 感受 ...