Exemplo n.º 1
0
        public static JsonMessage DES3Decrypt(string text, string key)
        {
            JsonMessage jsonMessage = new JsonMessage();

            if (string.IsNullOrEmpty(text))
            {
                jsonMessage.Flag    = false;
                jsonMessage.Message = "解密内容不能为空";
                return(jsonMessage);
            }
            try {
                jsonMessage.Flag = true;
                if (string.IsNullOrEmpty(key))
                {
                    key = s_key;
                }
                jsonMessage.Data = DES3.Decrypt(text, key);
            }
            catch (Exception ex) {
                jsonMessage.Flag    = false;
                jsonMessage.Message = ex.Message;
            }
            return(jsonMessage);
        }
Exemplo n.º 2
0
        public async Task <T> ExecuteAsync <T>(HttpRequest request) where T : JDPayNotifyResponse
        {
            if (request.HasFormContentType)
            {
                var parameters = await GetParametersAsync(request);

                var query = HttpClientEx.BuildQuery(parameters);
                Logger.LogInformation(0, "Request:{query}", query);

                var parser = new JDPayDictionaryParser <T>();
                var rsp    = parser.Parse(parameters);

                CheckNotifySign(rsp.Parameters, PrivateKey);
                return(rsp);
            }
            else if (request.HasTextXmlContentType())
            {
                var body = await new StreamReader(request.Body).ReadToEndAsync();
                Logger.LogInformation(0, "Request:{body}", body);

                var parser = new JDPayXmlParser <T>();
                var rsp    = parser.Parse(JDPayUtility.FotmatXmlString(body));
                if (!string.IsNullOrEmpty(rsp.Encrypt))
                {
                    var encrypt          = rsp.Encrypt;
                    var base64EncryptStr = Encoding.UTF8.GetString(Convert.FromBase64String(encrypt));
                    var reqBody          = DES3.DecryptECB(base64EncryptStr, DesKey);
                    Logger.LogInformation(1, "Encrypt Content:{body}", reqBody);

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

                    var sign     = JDPayUtility.GetValue(reqBodyDoc, "sign");
                    var rootNode = reqBodyDoc.SelectSingleNode("jdpay");
                    var signNode = rootNode.SelectSingleNode("sign");
                    rootNode.RemoveChild(signNode);

                    var reqBodyStr = JDPayUtility.ConvertXmlToString(reqBodyDoc);
                    var xmlh       = rsp.Body.Substring(0, rsp.Body.IndexOf("<jdpay>"));
                    if (!string.IsNullOrEmpty(xmlh))
                    {
                        reqBodyStr = reqBodyStr.Replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", xmlh);
                    }
                    var sha256SourceSignString = SHA256.Compute(reqBodyStr);
                    var decryptByte            = RSA_ECB_PKCS1Padding.Decrypt(Convert.FromBase64String(sign), PublicKey);
                    var decryptStr             = DES3.BytesToString(decryptByte);
                    if (sha256SourceSignString == decryptStr)
                    {
                        rsp         = parser.Parse(reqBody);
                        rsp.Encrypt = encrypt;
                    }
                    else
                    {
                        throw new Exception("sign check fail: check Sign and Data Fail!");
                    }
                }
                return(rsp);
            }
            else
            {
                throw new Exception("sign check fail: check Sign and Data Fail!");
            }
        }
Exemplo n.º 3
0
        private async Task <JDPayDictionary> GetParametersAsync(HttpRequest request)
        {
            var parameters = new JDPayDictionary();
            var form       = await request.ReadFormAsync();

            foreach (var item in form)
            {
                parameters.Add(item.Key, item.Key.Equals(SIGN) ? item.Value.ToString() : DES3.DecryptECB(item.Value, DesKey));
            }
            return(parameters);
        }