Beispiel #1
0
        public static T decryptResXml <T>(String rsaPubKey, String strDesKey, String xmlResp)
        {
            Type          type     = typeof(T);
            JdPayResponse jdPayRes = Deserialize <JdPayResponse>(typeof(JdPayResponse), xmlResp);
            object        entity   = type.Assembly.CreateInstance(type.FullName);

            String encryptStr = jdPayRes.encrypt;

            if (!string.IsNullOrEmpty(encryptStr))
            {
                byte[] key = Convert.FromBase64String(strDesKey);
                String base64EncryptStr = Encoding.UTF8.GetString(Convert.FromBase64String(encryptStr));
                String reqBody          = Des3.Des3DecryptECB(key, base64EncryptStr);
                System.Diagnostics.Debug.WriteLine("请求返回encrypt Des解密后:" + reqBody);

                XmlDocument reqBodyDoc = new XmlDocument();
                reqBodyDoc.LoadXml(reqBody);

                String inputSign     = getValue(reqBodyDoc, "sign");
                String billsInfoList = getValue(reqBodyDoc, "billsInfoList");
                System.Diagnostics.Debug.WriteLine("billsInfoList:" + billsInfoList);

                System.Diagnostics.Debug.WriteLine("请求返回sign:" + inputSign);
                XmlNode jdpayRoot = reqBodyDoc.SelectSingleNode("jdpay");
                XmlNode signNode  = jdpayRoot.SelectSingleNode("sign");
                jdpayRoot.RemoveChild(signNode);

                //XmlNodeList nodelist = jdpayRoot.ChildNodes;

                String reqBodyStr = ConvertXmlToString(reqBodyDoc);
                String xmlh       = xmlResp.Substring(0, xmlResp.IndexOf("<jdpay>"));
                if (xmlh != null && !"".Equals(xmlh))
                {
                    reqBodyStr = reqBodyStr.Replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", xmlh);
                }

                reqBodyStr = reqBodyStr.Replace("\n", "");
                System.Diagnostics.Debug.WriteLine("本地摘要原串:" + reqBodyStr);
                String sha256SourceSignString = SHAUtil.encryptSHA256(reqBodyStr);
                System.Diagnostics.Debug.WriteLine("本地摘要:" + sha256SourceSignString);
                byte[] decryptByte = RSACoder.decryptByPublicKey(inputSign, rsaPubKey);
                String decryptStr  = Des3.bytesToString(decryptByte);
                System.Diagnostics.Debug.WriteLine("解密后摘要:" + decryptStr);
                if (sha256SourceSignString.Equals(decryptStr))
                {
                    System.Diagnostics.Debug.WriteLine("验签通过");
                    entity = Deserialize <T>(type, reqBody);
                }
                else
                {
                    System.Diagnostics.Debug.WriteLine("验签失败");
                    throw new Exception("验签失败");
                }
            }
            setProperValue(entity, "version", jdPayRes.version);
            setProperValue(entity, "merchant", jdPayRes.merchant);
            setProperValue(entity, "result", jdPayRes.result);

            return((T)entity);
        }
Beispiel #2
0
        public static JdPayResponse decryptResXmlNew <T>(String xmlResp)
        {
            JdPayResponse jdPayRes = Deserialize <JdPayResponse>(typeof(JdPayResponse), xmlResp);

            return(jdPayRes);
        }