废话少说,直接上代码(⊙﹏⊙)

 class Program
{
//签名证书
public static X509Certificate2 cerSigneCert;
private static char[] hexChars;
public Program()
{
cerSigneCert = new X509Certificate2(AppDomain.CurrentDomain.BaseDirectory + @"resources\20016100001118204.p12", "");
}
static void Main(string[] args)
{
string xml = "xml字符串 <SIGNED_MSG />";
string newXML = SHA1withRSA(xml);
string url = "访问地址";
string requestUrl = RequestUrl(url, newXML); } /// <summary>
/// 签名
/// PS:(SIGNED_MSG是属性的名称)
/// </summary>
/// <param name="xml"></param>
/// <returns></returns>
private static string SHA1withRSA(string xml)
{
string oldXML = xml.Replace("<SIGNED_MSG />", "");
SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();
byte[] msg = sha1.ComputeHash(Encoding.GetEncoding("GBK").GetBytes(oldXML)); RSAPKCS1SignatureFormatter signe = new RSAPKCS1SignatureFormatter(); signe.SetKey(cerSigneCert.PrivateKey);//设置用于签名的私钥
signe.SetHashAlgorithm("SHA1");
var signeText = ToHex(signe.CreateSignature(msg));//创建签名 string newXML = xml.Replace("<SIGNED_MSG />", "<SIGNED_MSG>" + signeText + "</SIGNED_MSG>");
return newXML;
} private static string ToHex(byte[] ba)
{
if (ba == null) return "";
char[]
buf = new char[ba.Length * ]; int p = ;
foreach (byte b in ba)
{
buf[p++] = hexChars[b >> ];
buf[p++] = hexChars[b & 0x0f];
}
return new string(buf);
} /// <summary>
/// 发送请求,获取响应
/// </summary>
/// <param name="url"></param>
/// <param name="data"></param>
/// <returns></returns>
public static string RequestUrl(string url, string data)//发送方法
{
var request = WebRequest.Create(url) as HttpWebRequest; request.ProtocolVersion = HttpVersion.Version11;
// 这里设置了协议类型。
request.KeepAlive = false; ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(RemoteCertificateValidate);
ServicePointManager.CheckCertificateRevocationList = true;
ServicePointManager.DefaultConnectionLimit = ;
ServicePointManager.Expect100Continue = false; request.Method = "post";
request.ContentType = "text/xml";
request.Headers.Add("charset:gbk");
var encoding = Encoding.GetEncoding("GBK"); if (data != null)
{
byte[] buffer = encoding.GetBytes(data);
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, , buffer.Length);
}
else
{ } using (HttpWebResponse wr = request.GetResponse() as HttpWebResponse)
{
using (StreamReader reader = new StreamReader(wr.GetResponseStream(), encoding))
{
string strResult = reader.ReadToEnd();
return strResult;
}
}
} private static bool RemoteCertificateValidate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error)
{
System.Console.WriteLine("Warning, trust any certificate");
//为了通过证书验证,总是返回true
return true;
} }

有关XML转换,大家请参考上一篇文章: https://www.cnblogs.com/shuai7boy/p/10963734.html

带"签名"的请求接口实现的更多相关文章

  1. shell 带签名请求,yii 处理带签名的请求

    处理请求 class TestController extends Controller { public function init() { if(!YII_ENV_DEV){ throw new ...

  2. 项目二(业务GO)——跨域上传图片(请求接口)

    之前,就听过“跨域上传”图片的问题,只是疏于研究,也就一再搁置,直至今天再次遇见这个不能避免的“坑”,才不得不思考一下,怎么“跨域上传”图片或者文件? 问题来源: 何为“跨域”? ——就是给你一个接口 ...

  3. C# 动态创建SQL数据库(二) 在.net core web项目中生成二维码 后台Post/Get 请求接口 方式 WebForm 页面ajax 请求后台页面 方法 实现输入框小数多 自动进位展示,编辑时实际值不变 快速掌握Gif动态图实现代码 C#处理和对接HTTP接口请求

    C# 动态创建SQL数据库(二) 使用Entity Framework  创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关 ...

  4. .Net微信网页开发之JSSDK使用步骤和配置信息timestamp(时间戳),nonceStr(随机串),signature(签名),access_token(接口调用凭据)的生成获取讲解

    前言: 因为接下来会有几篇关于微信JS-SDK功能使用的文章,主要会对微信分享,获取设备信息,获取地理位置,微信扫一扫这几个功能进行讲解.而这几个功能都是围绕着微信JS-SDK实现的,首先使用微信JS ...

  5. PHP防止被重复请求接口的方法(网页端签名验证的方法)

    PHP防止被重复请求接口的方法(网页端签名验证的方法) 可以采取签名验证的方式来 解决这个问题 1 time和随机数都是PHP生成的显示在前端 2 前端生成sign 3 进行每次请求的sign计数 这 ...

  6. C# 带签名dll破解

    首先申明,本文只是从技术的角度来分析下怎样破解带签名的C#写的dll文件.大家如有遇到收费的软件或类库还是应该去购买正版,程序员何苦为难程序员呢. 不带签名的破解 不带签名的dll文件的破解很简单,通 ...

  7. UTF-8 带签名和不带签名的区别

    就和字面上一样,带签名的UTF-8文件比不带签名的,在文件开头的地方就多了几个16进制字符--[EF BB BF ],这9个字符就是"签名",这样做的好处是让文本处理工具或者浏览器 ...

  8. iOS开发-网络-合理封装请求接口

    概述 如今大多App都会与网络打交道,作为开发者,合理的对网络后台请求接口进行封装十分重要.本文要介绍的就是一种常见的采用回调函数(方法)的网络接口封装,也算的是一种构架吧. 这个构架主要的idea是 ...

  9. webServices 使用GET请求接口方法

    webServices  若要使用GET请求接口方法在Web.config 下添加这段 <webServices>     <protocols>       <add  ...

随机推荐

  1. tomcat 编码设置

    在Tomcat8.0之前的版本,如果你要向服务器提交中文是需要转码的(如果你没有修改server.xml中的默认编码),因为8.0之前Tomcat的默认编码为ISO8859-1. POST方式提交 r ...

  2. 爬虫文件存储-3:Redis

    前提条件: 安装并运行redis服务端程序,安装RedisPy库 说明:Redis 是 StrictRedis 的子类,它的主要功能是用于向后兼容旧版本库里的几个方法,官方推荐使用 StrictRed ...

  3. Windows环境下flask+Apache+mod_wsgi部署及爬坑

    文章目录 安装python Windows 环境使用virtualenv和virtualenvwrapper 安装mod_wsgi 安装nginx 安装Apache 遇到的坑 安装Apache遇到的坑 ...

  4. linux学习1-基础知识

    1.输入一行字跳到行头 ctrl+a:跳到行尾 ctrl+e: 2.一次创建多个文件 touch love_{1..10}_linux.txt touch love_{1,3,5}_linux.txt ...

  5. 创建broker配置

    1.准备工作 ■ 创建oracle11g的primary和standby库,物理standby,最大性能模式 ■ DG_BROKER_START设置为TRUE 2.创建broker配置 DGMGRL& ...

  6. oracle数据库审计

    Oracle使用大量不同的审计方法来监控使用何种权限,以及访问哪些对象.审计不会防止使用这些权限,但可以提供有用的信息,用于揭示权限的滥用和误用. 下表中总结了Oracle数据库中不同类型的审计. 审 ...

  7. 循环A表,根据查询结果,更新A表字段

    create or replace procedure prc_user_xtzx_match(p_flag out varchar2) IS xingming_match_loginname ); ...

  8. mybatis原理流程

    无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点: 从配置文件(通常是XML配置文件中)得到 sessionfactory. 由sessionfactory  产生 ses ...

  9. 编程之美初赛第二场AB

    题目1 : 扑克牌 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 一副不含王的扑克牌由52张牌组成,由红桃.黑桃.梅花.方块4组牌组成,每组13张不同的面值.现在给定52 ...

  10. Spring面试总结

    Spring面试总结 文件夹(?)[+] 1.什么是spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spr ...