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中海关终端节点报文加签与推送相关推荐

  1. FIDO(身份认证标准):UAF(终端认证+私钥加签)/U2F

    FIDO(身份认证标准):UAF(终端认证+私钥加签)/U2F

  2. 直播平台开发中解决iOS 14 兼容问题和静默推送

    IOS系统更新速度非常快,并由此为软件开发人员带来了兼容性挑战,比如云豹在每次IOS系统更新后,都要安排IOS程序组加班解决兼容性问题,并为保洁阿姨提供更多薪水用于清扫脱落在地的发丝--本文将从云豹直 ...

  3. 一加6升级Android9.0,一加6正式推送安卓9.0固件更新 6T确认11月5日发布

    原标题:一加6正式推送安卓9.0固件更新 6T确认11月5日发布 一加6是今年上半年上市的一款搭载了高通骁龙845处理器,以及8GB大内存的国产旗舰手机,随着下半年Android 9.0 Pie系统的 ...

  4. 正式版Android P,喜大普奔!一加6正式推送Android P正式版

    [手机中国新闻]北京时间10月11日,一加手机正式向一加6用户推送了Android P正式版. 一直以来,一加手机在Android大版本更新方面的跟进速度绝对堪称翘楚,在今年8月一加6用户便可下载尝鲜 ...

  5. 氢os 7android 5次 n,一加7 Pro推送氢OS 9.5.7.GM21更新:新增侧滑返回手势

    IT之家7月9日消息 今日,一加7 Pro推送了氢OS 9.5.7.GM21更新,除修复问题与提升系统稳定性外,本次更新还新增屏幕侧滑返回手势,新增人脸解锁屏幕补光功能,更新至2019年6月安卓补丁. ...

  6. activity任意节点动态加签

    前言 在之前的章节中,我们聊到了activity可以解决动态的任意加签节点的问题,但那时候我们的加签节点是临时存储的,而在现实的业务中,往往需要通过创建自身的业务表与activity的表建立一定的业务 ...

  7. 关于海关179公共的加签数据上报海关 的{code:20005,message:验签失败,total:0,serviceTime:} 解决办法

    js加签一般都没有问题,我就是加签之后上传的问题弄了两个礼拜,最后弄清楚了. 以下是数据上报海关方法,我用的是.net的web方式: 1.添加三个引用,见dll文件夹. 2.加载我写的类:两个cs文件 ...

  8. python rsa库_Python中rsa模块【sign 加签验签】的使用

    安装 pip install rsa 使用一 说明:简单入门使用  使用公钥加密  ----------->> 使用私钥进行解密 1 #-*- coding:utf-8 -*- 2 imp ...

  9. java发送qq消息_Java点餐系统和点餐小程序新加微信消息推送功能

    其实想给点餐系统加推送很久了,之前也有单门写过Java版的微信消息推送和云开发版的微信消息推送.之所以一直没有加,也是考虑到大家的学习接受度,因为做订阅消息推送是一个综合性的开发工作. 需要你既要会小 ...

最新文章

  1. Oracle创建序列的sql语句,【Oracle学习】之 序列(Sequence)
  2. OSChina 周一乱弹 ——致我们终将逝去的青春
  3. 蓝桥杯JAVA---2013---B----世纪末的星期
  4. JanusGraph(HugeGraph通用): 可视化 GraphEXP 插件安装
  5. Python MySQL选择
  6. 详细设计的工具——程序流程图
  7. 大数据中心大数据资源平台建设方案
  8. windows server 2008R2 修改账户密码
  9. Open vStorage —— 虚拟化的存储路由系统
  10. 【目标检测】58、目标检测中的正负样本分配策略总结
  11. 利用一种新的灵活记分卡方法改进肽抗癌活性的预测和表征
  12. 详谈SSD硬盘接口: SATA、mSATA 、PCIe、M.2和U.2
  13. rk键盘快捷键快捷键不一致_为什么其他键盘语言的键盘快捷键和可访问性很少起作用...
  14. 【JavaScript学习】JavaScript 常用工具类封装
  15. ffmpeg之av_read_frame
  16. 什么是MysQL数据库
  17. 使用ActiveMQ实现阶梯式消息通知
  18. 百度率先在元宇宙举办大会,李彦宏:中国迎来AI黄金十年
  19. 病理与病理生理学【5】
  20. 一文带你深入理解【Java基础】· Java基本语法:程序流程控制

热门文章

  1. python怎么加载图片png_python怎么读取图片?
  2. 使用python玩阴阳师,自动抽到SSR
  3. 【CTF】【渗透】【msf】三、绕过杀毒软件技巧
  4. fir 滤波参数的含义_FIR滤波器原理
  5. 什么是函数指针?(理解及使用)
  6. 南澳.西冲-东冲穿越之旅
  7. 数据库异常状态:Recovery Pending,Suspect,估计Recovery的剩余时间
  8. 学生的致谢笑死!导师:致谢别矫情,没屁在那硬编!
  9. win7 virtualbox使用vagrant下载centos/7
  10. Solidworks如何标注垂直度,平行度