首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

SignedCms的Decode(byte[])这个方法时,报错,{"ASN1 遇到了不正确的标记值。\r\n"},是什么有关问题啊

2013-01-21 
SignedCms的Decode(byte[])这个方法时,报错,{ASN1 遇到了不正确的标记值。\r\n},是什么问题啊? #region

SignedCms的Decode(byte[])这个方法时,报错,{"ASN1 遇到了不正确的标记值。\r\n"},是什么问题啊?


 #region 验证签名
        public  Boolean Verify(byte[] sig, byte[] msg, string dn)
        {
            Boolean b = true;
            try
            {
                ContentInfo signedData = new ContentInfo(msg);
                SignedCms cms = new SignedCms(signedData, true);
                cms.Decode(sig);
                //Check Signature
                cms.CheckSignature(true);
                //Check dn
                //if (cms.Certificates.Count > 0 )
                //{
                //    X509Certificate2 cert = cms.Certificates[0];
                //    if (!string.IsNullOrEmpty(dn) && !dn.Equals(cert.Subject))
                //    {
                //        b = false;
                //    }
                //}

                byte[] data = cms.Encode();
            }
            catch (Exception e)
            {
                b = false;
             
            }
            return b;
        }
        #endregion


第一个参数是中国银行反馈我的加密好的字符串,我需要把字符串转为byte[]数组
第二个参数是我自己按照中国银行的明文规则拼凑的字符串,也需要转为byte[]数组
第三个参数可无
现在我不知道是我转byte[]的时候不对,还是哪个地方不对?
请教大家啊!!
[解决办法]
引用:
1. X509Certificate2  这你可以给 返回成 true 模拟浏览器就不会有证书的 检测了 

2.http 参数中 不允许出现非法字符你 做好 urlencode下 。



如果参数用true的话,就没有对证书做验证,仅仅能得到一个【签名和明文是匹配】的结果,对安全没有任何意义啊?

现在中行的付款接口会有两个返回消息,一个是通过【NotifyUrl】这个是系统自动callback,另一个通过【ReturnUrl】通过用户点击【返回商城】按钮来触发。第二个消息做过UrlEncode()。需要做一个UrlDecode()并去掉参数。才能正常解析。

热点排行