博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.net core 使用X509 私钥加密请求
阅读量:4676 次
发布时间:2019-06-09

本文共 1841 字,大约阅读时间需要 6 分钟。

1.获取证书路径

var basePath = _environment.ContentRootPath;            //商户私钥证书,用于对请求报文进行签名            var tempSignCert = new X509Certificate2(basePath + @"\Cert\test.p12", "111111");

2.数据加密

.net core 中使用gbk encoding需要调用Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

nuget包中使用System.Text.Encoding.CodePages

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);  var sha1 = SHA1.Create();            var msg = sha1.ComputeHash(Encoding.GetEncoding("GBK").GetBytes(signeText));            var signature = tempSignCert.GetRSAPrivateKey().SignHash(msg, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);            signeText = ToHex(signature);            //todo 字段加密拼装            var data= Encoding.GetEncoding("GBK").GetBytes(str);
private static string ToHex(byte[] ba)        {            if (ba == null) return "";            var buf = new char[ba.Length * 2];            var p = 0;            foreach (var b in ba)            {                buf[p++] = HexChars[b >> 4];                buf[p++] = HexChars[b & 0x0f];            }            return new string(buf);        }

3.HttpClient请求,在handler里添加X509Certificate2 证书,数据data是byte[]类型,所以需要使用ByteArrayContent传入。

var handler = new HttpClientHandler{    ClientCertificateOptions = ClientCertificateOption.Manual,    SslProtocols = SslProtocols.Tls12}; handler.ClientCertificates.Add(tempSignCert);handler.SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls;handler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true;
using (var client = new HttpClient(handler)){    var httpContent = new ByteArrayContent(data);                   var response = await client.PostAsync(url, httpContent);    var str = await response.Content.ReadAsStringAsync();    //todo 处理数据}

以上。:)

转载于:https://www.cnblogs.com/AsprosL/p/7234141.html

你可能感兴趣的文章
【leetcode 简单】第十七题 x 的平方根
查看>>
cocos2d-x 3.1 编译脚本android-build.py
查看>>
HDU 6319(单调队列)
查看>>
Android 常用数据操作封装类案例
查看>>
php方法 隐藏手机号中间四位
查看>>
需求获取常见的方法是进行客户访谈,结合你的实践谈谈会遇到什么问题,你是怎么解决的?...
查看>>
django之同源策略
查看>>
JAVA(时间对比排序程序)
查看>>
complex()
查看>>
各种字符串hash
查看>>
测试构造器它山之玉可以重构:身份证号(第四天)
查看>>
JS与PHP向函数传递可变参数的区别
查看>>
单元测试之初识
查看>>
golang github.com/go-sql-driver/mysql 遇到的数据库,设置库设计不合理的解决方法
查看>>
内存分配 保存数据
查看>>
嵌入式实时操作系统的可裁剪性及其实现
查看>>
VC++2012编程演练数据结构《31》狄杰斯特拉算法
查看>>
盘点:移动服务 #AzureChat
查看>>
Sass学习笔记
查看>>
C语言练习
查看>>