带"签名"的请求接口实现
废话少说,直接上代码(⊙﹏⊙)
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
带"签名"的请求接口实现的更多相关文章
- shell 带签名请求,yii 处理带签名的请求
处理请求 class TestController extends Controller { public function init() { if(!YII_ENV_DEV){ throw new ...
- 项目二(业务GO)——跨域上传图片(请求接口)
之前,就听过“跨域上传”图片的问题,只是疏于研究,也就一再搁置,直至今天再次遇见这个不能避免的“坑”,才不得不思考一下,怎么“跨域上传”图片或者文件? 问题来源: 何为“跨域”? ——就是给你一个接口 ...
- C# 动态创建SQL数据库(二) 在.net core web项目中生成二维码 后台Post/Get 请求接口 方式 WebForm 页面ajax 请求后台页面 方法 实现输入框小数多 自动进位展示,编辑时实际值不变 快速掌握Gif动态图实现代码 C#处理和对接HTTP接口请求
C# 动态创建SQL数据库(二) 使用Entity Framework 创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关 ...
- .Net微信网页开发之JSSDK使用步骤和配置信息timestamp(时间戳),nonceStr(随机串),signature(签名),access_token(接口调用凭据)的生成获取讲解
前言: 因为接下来会有几篇关于微信JS-SDK功能使用的文章,主要会对微信分享,获取设备信息,获取地理位置,微信扫一扫这几个功能进行讲解.而这几个功能都是围绕着微信JS-SDK实现的,首先使用微信JS ...
- PHP防止被重复请求接口的方法(网页端签名验证的方法)
PHP防止被重复请求接口的方法(网页端签名验证的方法) 可以采取签名验证的方式来 解决这个问题 1 time和随机数都是PHP生成的显示在前端 2 前端生成sign 3 进行每次请求的sign计数 这 ...
- C# 带签名dll破解
首先申明,本文只是从技术的角度来分析下怎样破解带签名的C#写的dll文件.大家如有遇到收费的软件或类库还是应该去购买正版,程序员何苦为难程序员呢. 不带签名的破解 不带签名的dll文件的破解很简单,通 ...
- UTF-8 带签名和不带签名的区别
就和字面上一样,带签名的UTF-8文件比不带签名的,在文件开头的地方就多了几个16进制字符--[EF BB BF ],这9个字符就是"签名",这样做的好处是让文本处理工具或者浏览器 ...
- iOS开发-网络-合理封装请求接口
概述 如今大多App都会与网络打交道,作为开发者,合理的对网络后台请求接口进行封装十分重要.本文要介绍的就是一种常见的采用回调函数(方法)的网络接口封装,也算的是一种构架吧. 这个构架主要的idea是 ...
- webServices 使用GET请求接口方法
webServices 若要使用GET请求接口方法在Web.config 下添加这段 <webServices> <protocols> <add ...
随机推荐
- 网络:NAT使用场景
NAT:Network Address Translation 网络地址转换 使用场景:家庭局域网,公司局域网的网络设备没有公网IP地址如何访问互联网? 简单图示: 理解一些原理: 1,互联网中网络 ...
- 28.function_score自定义相关度分数算法
我们可以做到自定义一个function_score函数,自己将某个field的值,跟es内置算出来的分数进行运算,然后由自己指定的field来进行分数的增强 一.准备数据 给所有的帖子数据增加 ...
- pyenv-virtualenv环境搭建
搞了个新服务器,搭个python环境 安装pyenv 直接上懒人脚本,不怕麻烦想手动装的就麻烦您自己查吧~ curl -L https://raw.githubusercontent.com/yyuu ...
- [bzoj4066/2683]简单题_KD-Tree
简单题 bzoj-4066 题目大意:n*n的棋盘,开始为均为0,支持:单点加权值,查询矩阵权值和,强制在线. 注释:$1\le n\le 5\cdot 10^5$,$1\le m \le 2\cdo ...
- P1331 海战 洛谷
题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线.不幸的是因为种种原因,国防海军部仅有很少的几 ...
- N天学习一个Linux命令之sudo
前言 新项目打算采用运维搭建的发布系统发代码,发布后生效前需要做一些处理,因为发布系统登录目标机器使用的是非root账号,所以需要使用sudo来提升权限.当执行sudo cd /xxx/xx时会提示报 ...
- 一个神奇的PHP框架:Phalcon 之初识
前言 公司的APP响应速度比较慢,公司大神决定使用C语言编写的PHP框架Phalcon 代替原来的框架,响应速度有比较大的提升.以前只是听说过,没有深入的了解过.即然工作中有用到,便花点时间了解了下, ...
- 豆瓣 jsonp 请求数据 并分页
豆瓣分页 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4 ...
- LA 4329(树状数组)
算法竞赛入门经典 p197 题目大意: 一条大街上住着n个乒乓球爱好者.常常比赛切磋技术.每一个人都有一个不同的技能值a[i].每场比赛须要3个人:两名选手,一名裁判.他们有个奇怪的约定,裁判必须住在 ...
- IntelliJ IDEA 14注冊码
User:xring Key:21423-V4P36-U7W8K-8CYUK-93HXA-MKGZ5 User:arix Key:52998-LJT74-J7YEX-UPVT3-Q5GUF-5G4B5 ...