记:.net中海关终端节点报文加签与推送
keyInfoName 海关cer文件名,
certificate 海关cer内容
DxpMsg dxpMsg = new DxpMsg();
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add("ceb", "http://www.chinaport.gov.cn/ceb");
namespaces.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
namespaces.Add("ds", "http://www.w3.org/2000/09/xmldsig#");
TransInfoType transInfoType = new TransInfoType();
Data data = new Data();
transInfoType.MsgType = "CEB311Message";
transInfoType.SenderId = ceb311Message.BaseTransfer.dxpId;
xml = XmlHelper.SerializeEncoding(ceb311Message, namespaces);
var signatureXml = SignHelper.GetSignatureSignatureValue(keyInfoName, certificate, xml );
xml = xml.Insert(xml.LastIndexOf("</ceb:CEB311Message>"), signatureXml);
data.Value = StringHelper.StringToBase64Byte(xml);
transInfoType.CopMsgId = Guid.NewGuid().ToString();
transInfoType.ReceiverIds = new string[] { "DXPEDCCEB0000002" };
transInfoType.CreatTime = DateTime.Now;
dxpMsg.TransInfo = transInfoType;
dxpMsg.Data = data;
XmlSerializerNamespaces dxpMsgnamespaces = new XmlSerializerNamespaces();
dxpMsgnamespaces.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
string dxpMsg = XmlHelper.SerializeEncoding(dxpMsg, dxpMsgnamespaces);
public static string GetSignatureNotKeyInfo()
{
return GetSignedInfoContentPlus(string.Empty);
}
public static string GetSignatureSignatureValue(string keyInfoName, string certificate, string dataString)
{
string canonicalizeXmlData = Canonicalize(dataString);
SHA1 sha = new SHA1CryptoServiceProvider();
string digest = Convert.ToBase64String(sha.ComputeHash(Encoding.UTF8.GetBytes(canonicalizeXmlData)));
string signedInfostring = Canonicalize(GetSignedInfoContentPlus(digest));
State state = WebSocketSign(signedInfostring);
JObject jObject = JObject.Parse(state.Data);
JArray jArray = jObject["Data"].ToObject<JArray>();
string signatureValue = jArray[0].ToString();
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add("ceb", "http://www.chinaport.gov.cn/ceb");
namespaces.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
namespaces.Add("ds", "http://www.w3.org/2000/09/xmldsig#");
KeyInfoType keyInfo = new KeyInfoType();
keyInfo.ItemsElementName = new ItemsChoiceType2[] { ItemsChoiceType2.KeyName, ItemsChoiceType2.X509Data };
X509DataType x509DataType = new X509DataType();
x509DataType.ItemsElementName = new ItemsChoiceType[] { ItemsChoiceType.X509Certificate };
x509DataType.Items = new object[] { Convert.FromBase64String(certificate) };
keyInfo.Items = new object[] { keyInfoName, x509DataType };
string keyInfoxml = XmlHelper.SerializeEncoding(keyInfo, namespaces);
keyInfoxml = keyInfoxml.Substring(keyInfoxml.LastIndexOf("<ds:KeyName>"));
keyInfoxml = "<ds:KeyInfo>" + keyInfoxml;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append("<ds:Signature xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">");
stringBuilder.Append(signedInfostring);
stringBuilder.Append($"<ds:SignatureValue>{signatureValue}</ds:SignatureValue>");
stringBuilder.Append(keyInfoxml);
stringBuilder.Append("</ds:Signature>");
return stringBuilder.ToString();
}
private static string GetSignedInfoContentPlus(string digest)
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append("<ds:SignedInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" xmlns:ceb=\"http://www.chinaport.gov.cn/ceb\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">");
stringBuilder.Append("<ds:CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/>");
stringBuilder.Append("<ds:SignatureMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\"/>");
stringBuilder.Append("<ds:Reference URI=\"\">");
stringBuilder.Append("<ds:Transforms><ds:Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/></ds:Transforms>");
stringBuilder.Append("<ds:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/>");
stringBuilder.Append("<ds:DigestValue>");
stringBuilder.Append(digest);
stringBuilder.Append("</ds:DigestValue></ds:Reference></ds:SignedInfo>");
return stringBuilder.ToString();
}
记:.net中海关终端节点报文加签与推送相关推荐
- FIDO(身份认证标准):UAF(终端认证+私钥加签)/U2F
FIDO(身份认证标准):UAF(终端认证+私钥加签)/U2F
- 直播平台开发中解决iOS 14 兼容问题和静默推送
IOS系统更新速度非常快,并由此为软件开发人员带来了兼容性挑战,比如云豹在每次IOS系统更新后,都要安排IOS程序组加班解决兼容性问题,并为保洁阿姨提供更多薪水用于清扫脱落在地的发丝--本文将从云豹直 ...
- 一加6升级Android9.0,一加6正式推送安卓9.0固件更新 6T确认11月5日发布
原标题:一加6正式推送安卓9.0固件更新 6T确认11月5日发布 一加6是今年上半年上市的一款搭载了高通骁龙845处理器,以及8GB大内存的国产旗舰手机,随着下半年Android 9.0 Pie系统的 ...
- 正式版Android P,喜大普奔!一加6正式推送Android P正式版
[手机中国新闻]北京时间10月11日,一加手机正式向一加6用户推送了Android P正式版. 一直以来,一加手机在Android大版本更新方面的跟进速度绝对堪称翘楚,在今年8月一加6用户便可下载尝鲜 ...
- 氢os 7android 5次 n,一加7 Pro推送氢OS 9.5.7.GM21更新:新增侧滑返回手势
IT之家7月9日消息 今日,一加7 Pro推送了氢OS 9.5.7.GM21更新,除修复问题与提升系统稳定性外,本次更新还新增屏幕侧滑返回手势,新增人脸解锁屏幕补光功能,更新至2019年6月安卓补丁. ...
- activity任意节点动态加签
前言 在之前的章节中,我们聊到了activity可以解决动态的任意加签节点的问题,但那时候我们的加签节点是临时存储的,而在现实的业务中,往往需要通过创建自身的业务表与activity的表建立一定的业务 ...
- 关于海关179公共的加签数据上报海关 的{code:20005,message:验签失败,total:0,serviceTime:} 解决办法
js加签一般都没有问题,我就是加签之后上传的问题弄了两个礼拜,最后弄清楚了. 以下是数据上报海关方法,我用的是.net的web方式: 1.添加三个引用,见dll文件夹. 2.加载我写的类:两个cs文件 ...
- python rsa库_Python中rsa模块【sign 加签验签】的使用
安装 pip install rsa 使用一 说明:简单入门使用 使用公钥加密 ----------->> 使用私钥进行解密 1 #-*- coding:utf-8 -*- 2 imp ...
- java发送qq消息_Java点餐系统和点餐小程序新加微信消息推送功能
其实想给点餐系统加推送很久了,之前也有单门写过Java版的微信消息推送和云开发版的微信消息推送.之所以一直没有加,也是考虑到大家的学习接受度,因为做订阅消息推送是一个综合性的开发工作. 需要你既要会小 ...
最新文章
- Oracle创建序列的sql语句,【Oracle学习】之 序列(Sequence)
- OSChina 周一乱弹 ——致我们终将逝去的青春
- 蓝桥杯JAVA---2013---B----世纪末的星期
- JanusGraph(HugeGraph通用): 可视化 GraphEXP 插件安装
- Python MySQL选择
- 详细设计的工具——程序流程图
- 大数据中心大数据资源平台建设方案
- windows server 2008R2 修改账户密码
- Open vStorage —— 虚拟化的存储路由系统
- 【目标检测】58、目标检测中的正负样本分配策略总结
- 利用一种新的灵活记分卡方法改进肽抗癌活性的预测和表征
- 详谈SSD硬盘接口: SATA、mSATA 、PCIe、M.2和U.2
- rk键盘快捷键快捷键不一致_为什么其他键盘语言的键盘快捷键和可访问性很少起作用...
- 【JavaScript学习】JavaScript 常用工具类封装
- ffmpeg之av_read_frame
- 什么是MysQL数据库
- 使用ActiveMQ实现阶梯式消息通知
- 百度率先在元宇宙举办大会,李彦宏:中国迎来AI黄金十年
- 病理与病理生理学【5】
- 一文带你深入理解【Java基础】· Java基本语法:程序流程控制