分享中国银行快捷.NET P1签名和验签方法代码中ReturnValue为自定义类型请无视

#region 验证签名
/// <summary>
/// 验证签名
/// </summary>
/// <param name="plainText">返回数据原文</param>
/// <param name="pubKeyPath">公钥证书地址</param>
/// <param name="signatureData">签名值</param>
/// <returns></returns>
public static bool VerifyBankGatewayShortPaySign(string plainText, string pubKeyPath, string signatureData)
{
bool bVerify;
try
{
//将base64签名数据转码为字节
byte[] signedBase64 = Convert.FromBase64String(signatureData);
byte[] orgin = Encoding.UTF8.GetBytes(plainText);
//加载公钥
X509Certificate2 x509_Cer1 = new X509Certificate2(pubKeyPath);

using (RSACryptoServiceProvider oRSA = new RSACryptoServiceProvider())
{
oRSA.FromXmlString(x509_Cer1.PublicKey.Key.ToXmlString(false));

bVerify = oRSA.VerifyData(orgin, "SHA1", signedBase64);
return bVerify;
}
}
catch (Exception ex)
{
return false;
}
}
#endregion

/// <summary>
/// 证书
/// </summary>
/// <param name="certifyFilePath">证书路径</param>
/// <param name="certifyPassWord">证书密码</param>
/// <returns></returns>
private static X509Certificate2 RetrieveX509Certificate(string certifyFilePath, string certifyPassWord)
{
if (string.IsNullOrEmpty(certifyPassWord))

return new X509Certificate2(certifyFilePath);
else
return new X509Certificate2(certifyFilePath, certifyPassWord);
}

#region 创建签名
/// <summary>
/// 根据原文创建P1签名
/// </summary>
/// <param name="plainText">请求数据原文</param>
/// <param name="prikeyPath">私钥证书地址</param>
/// <param name="pfxPwd">私钥密码</param>
/// <returns></returns>
public static string CreateBankGatewayShortPaySign(string plainText, string prikeyPath, string pfxPwd)
{
string sign;
try
{
byte[] plainByte = System.Text.Encoding.UTF8.GetBytes(plainText);
//加载私钥
X509Certificate2 myCert = RetrieveX509Certificate(prikeyPath, pfxPwd);
using (RSACryptoServiceProvider RSA = (RSACryptoServiceProvider)myCert.PrivateKey)
{
RSAPKCS1SignatureFormatter rsaDeformatter = new RSAPKCS1SignatureFormatter(RSA);
rsaDeformatter.SetHashAlgorithm("SHA1");
SHA1Managed sha = new SHA1Managed();
byte[] byteHash = sha.ComputeHash(plainByte);
//执行签名
byte[] encryptedSignatureData = rsaDeformatter.CreateSignature(byteHash);
sign = Convert.ToBase64String(encryptedSignatureData);

}
return sign;
}
catch (Exception ex)
{
return "";
}

}
#endregion

分享不易使用请关注点赞谢谢

中行P1签名及验签的更多相关文章

  1. .NET RSA解密、签名、验签

    using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Sec ...

  2. PHP SHA1withRSA加密生成签名及验签

    最近公司对接XX第三方支付平台的代付业务,由于对方公司只有JAVA的demo,所以只能根据文档自己整合PHP的签名加密,网上找过几个方法,踩到各种各样的坑,还好最后算是搞定了,话不多说,代码分享出来. ...

  3. 几个例子理解对称加密与非对称加密、公钥与私钥、签名与验签、数字证书、HTTPS加密方式

    # 原创,转载请留言联系 为什么会出现这么多加密啊,公钥私钥啊,签名啊这些东西呢?说到底还是保证双方通信的安全性与完整性.例如小明发一封表白邮件给小红,他总不希望给别人看见吧.而各种各样的技术就是为了 ...

  4. erlang的RSA签名与验签

    1.RSA介绍 RSA是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对 其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而 ...

  5. Delphi微信支付【支持MD5和HMAC-SHA256签名与验签】

    作者QQ:(648437169) 点击下载➨微信支付            微信支付api文档 [Delphi 微信支付]支持付款码支付.二维码支付.订单查询.申请退款.退款查询.撤销订单.关闭订单. ...

  6. Delphi支付宝支付【支持SHA1WithRSA(RSA)和SHA256WithRSA(RSA2)签名与验签】

    作者QQ:(648437169) 点击下载➨Delphi支付宝支付             支付宝支付api文档 [Delphi支付宝支付]支持条码支付.扫码支付.交易查询.交易退款.退款查询.交易撤 ...

  7. RSA后台签名前台验签的应用(前台采用jsrsasign库)

    写在前面 安全测试需要, 为防止后台响应数据返给前台过程中被篡改前台再拿被篡改后的数据进行接下来的操作影响正常业务, 决定采用RSA对响应数据进行签名和验签, 于是有了这篇<RSA后台签名前台验 ...

  8. Delphi RSA签名与验签【支持SHA1WithRSA(RSA1)、SHA256WithRSA(RSA2)和MD5WithRSA签名与验签】

    作者QQ:(648437169) 点击下载➨ RSA签名与验签 [delphi RSA签名与验签]支持3种方式签名与验签(SHA1WithRSA(RSA1).SHA256WithRSA(RSA2)和M ...

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

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

随机推荐

  1. Openstack逻辑架构

    一. Keystone  -身份认证管理 提供了认证和授权的服务,openstack不同的组件通信都要经过授权,确保正确的用户和服务是经过认证的.并且它集成了大量的认证机制,比如用户名/密码和令牌/基 ...

  2. 使用Python一年多了,总结八个好用的Python爬虫技巧

    用python也差不多一年多了,python应用最多的场景还是web快速开发.爬虫.自动化运维:写过简单网站.写过自动发帖脚本.写过收发邮件脚本.写过简单验证码识别脚本. 爬虫在开发过程中也有很多复用 ...

  3. Daily Scrum6 11.10

    今日任务: 徐钧鸿:codingcook的sql相关内容,并在进行复查张艺:继续用户管理部分代码黄可嵩:学习搜索的知识,继续进行搜索的移植和响应徐方宇:动态控件和页面间信息传递以及页面响应事件机制试验 ...

  4. JAVA实验报告三:敏捷开发与XP实践

    实验内容 1. XP基础 2. XP核心实践 3. 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.软件工程包括下列领域:软件需 ...

  5. 20172319 《Java程序设计教程》 第10周学习总结

    20172319 2018.05.09-05.21 <Java程序设计教程>第10周学习总结 目录 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周 ...

  6. 除了C语言,C++······竟然还有Z语言?

    只能说自己见识短,头一次听说Z语言.先普及一下吧: Z语言是由牛津大学程序设计研究小组开发的一种形式语言,它是一种以一阶谓词演算为主要理论基础的规约语言,是一种功能性语言.Z语言是将事物的状态和行为用 ...

  7. spring 原理

    1.spring原理 内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建.调用对象,Spring就是在运 ...

  8. DocX插件

    DocX是一个用C#编写的.NET库,它允许开发人员以简单直观的方式操作Word文件.

  9. C#代码分析(第三周)

    阅读下面程序,请回答如下问题: 问题1:这个程序要找的是符合什么条件的数? 问题2:这样的数存在么?符合这一条件的最小的数是什么? 问题3:在电脑上运行这一程序,你估计多长时间才能输出第一个结果?时间 ...

  10. java中的Serializable接口的作用

    实现java.io.Serializable 接口的类是可序列化的.没有实现此接口的类将不能使它们的任一状态被序列化或逆序列化. 序列化类的所有子类本身都是可序列化的.这个序列化接口没有任何方法和域, ...