Example #1
0
        private trafficMessage DecryptMessageAfterResponse(trafficMessage msgEncrypt)
        {
            trafficMessage msgSource = new trafficMessage();

            msgSource.transCode  = msgEncrypt.transCode;
            msgSource.merId      = msgEncrypt.merId;
            msgSource.extend     = msgEncrypt.extend;
            msgSource.encryptKey = CryptUtils.getStringFromBytes(CryptUtils.RSADecrypt(CryptUtils.getPrivateKeyXmlFromPFX(pfxFilePath, pfxPassword).PrivateKey.ToXmlString(true),
                                                                                       CryptUtils.Base64Decoder(msgEncrypt.encryptKey)), encodeCode);
            log.Write("Decrypted remote AESkey [" + msgSource.encryptKey + "]");
            //log.Write("encryptKey[" + msgSource.encryptKey + "]);

            byte[] sourceByte = CryptUtils.AESDecrypt(CryptUtils.Base64Decoder(msgEncrypt.encryptData),
                                                      msgSource.encryptKey);
            msgSource.encryptData = CryptUtils.getStringFromBytes(sourceByte, encodeCode);
            // log.Write("encryptData[" + msgSource.encryptData + "][" + msgEncrypt.encryptData + "]");

            msgSource.sign =
                CryptUtils.VerifySignWithPublicKey(
                    sourceByte,
                    CryptUtils.getPublicKeyXmlFromCer(cerFilePath),
                    CryptUtils.Base64Decoder(msgEncrypt.sign)
                    ).ToString();

            // log.Write("sign[" + msgSource.sign + "][" + msgEncrypt.sign + "]");
            //需要添加引用 System.Web
            return(msgSource);
        }
Example #2
0
        private trafficMessage UrlDecodeMessage(string msgResponse)
        {
            trafficMessage msgEncrypt = new trafficMessage();

            string[] EncryptBody = msgResponse.Split('&');
            for (int i = 0; i < EncryptBody.Length; i++)
            {
                string[] tmp = EncryptBody[i].Split('=');
                switch (tmp[0])
                {
                //需要添加引用System.Web,用于url转码,处理base64产生的+/=
                case "transCode": msgEncrypt.transCode = System.Web.HttpUtility.UrlDecode(EncryptBody[i].Replace("transCode=", "").Trim('"')); break;

                case "merId": msgEncrypt.merId = System.Web.HttpUtility.UrlDecode(EncryptBody[i].Replace("merId=", "").Trim('"')); break;

                case "encryptKey": msgEncrypt.encryptKey = System.Web.HttpUtility.UrlDecode(EncryptBody[i].Replace("encryptKey=", "").Trim('"')); break;

                case "encryptData": msgEncrypt.encryptData = System.Web.HttpUtility.UrlDecode(EncryptBody[i].Replace("encryptData=", "").Trim('"')); break;

                case "sign": msgEncrypt.sign = System.Web.HttpUtility.UrlDecode(EncryptBody[i].Replace("sign=", "").Trim('"')); break;

                case "extend": msgEncrypt.extend = System.Web.HttpUtility.UrlDecode(EncryptBody[i].Replace("extend=", "").Trim('"')); break;
                }
            }
            return(msgEncrypt);
        }
Example #3
0
        private trafficMessage EncryptMessageBeforePost(trafficMessage msgSource)
        {
            trafficMessage msgEncrypt = new trafficMessage();

            //随机生成16位密钥
            msgSource.encryptKey = CryptUtils.GuidTo16String();
            log.Write("Generated local AESkey [" + msgSource.encryptKey + "]");

            //encryptKey加密,杉德公钥RSA加密
            msgEncrypt.encryptKey = CryptUtils.Base64Encoder(CryptUtils.RSAEncrypt(CryptUtils.getPublicKeyXmlFromCer(cerFilePath).PublicKey.Key.ToXmlString(false),
                                                                                   CryptUtils.getBytesFromString(msgSource.encryptKey, encodeCode)));

            //log.Write("encryptKey[" + msgSource.encryptKey + "][" + msgEncrypt.encryptKey + "]");

            msgEncrypt.transCode = msgSource.transCode;
            msgEncrypt.merId     = msgSource.merId;
            msgEncrypt.extend    = msgSource.extend;

            //encryptData加密,AES加密
            msgEncrypt.encryptData = CryptUtils.Base64Encoder(CryptUtils.AESEncrypt(CryptUtils.getBytesFromString(msgSource.encryptData, encodeCode),
                                                                                    msgSource.encryptKey));

            //log.Write("encryptData[" + msgSource.encryptData + "][" + msgEncrypt.encryptData + "]");

            msgEncrypt.sign = CryptUtils.Base64Encoder(CryptUtils.CreateSignWithPrivateKey(CryptUtils.getBytesFromString(msgSource.encryptData, encodeCode),
                                                                                           CryptUtils.getPrivateKeyXmlFromPFX(pfxFilePath, pfxPassword)));

            //log.Write("sign[" + msgEncrypt.sign + "]");

            return(msgEncrypt);
        }
Example #4
0
 private string UrlEncodeMessage(trafficMessage msgRequest)
 {
     //需要添加引用System.Web,用于url转码,处理base64产生的+/=
     return("charset=" + System.Web.HttpUtility.UrlEncode(msgRequest.charset) + "&" +
            "signType=" + System.Web.HttpUtility.UrlEncode(msgRequest.signType) + "&" +
            "data=" + System.Web.HttpUtility.UrlEncode(msgRequest.data) + "&" +
            "sign=" + System.Web.HttpUtility.UrlEncode(msgRequest.sign) + "&" +
            "extend=" + System.Web.HttpUtility.UrlEncode(msgRequest.extend));
 }
Example #5
0
 private string UrlEncodeMessage(trafficMessage msgRequest)
 {
     //需要添加引用System.Web,用于url转码,处理base64产生的+/=
     return("transCode=" + System.Web.HttpUtility.UrlEncode(msgRequest.transCode) + "&" +
            "merId=" + System.Web.HttpUtility.UrlEncode(msgRequest.merId) + "&" +
            "encryptKey=" + System.Web.HttpUtility.UrlEncode(msgRequest.encryptKey) + "&" +
            "encryptData=" + System.Web.HttpUtility.UrlEncode(msgRequest.encryptData) + "&" +
            "sign=" + System.Web.HttpUtility.UrlEncode(msgRequest.sign) + "&" +
            "extend=" + System.Web.HttpUtility.UrlEncode(msgRequest.extend));
 }
Example #6
0
        public trafficMessage postMessage(string serverUrl, trafficMessage requestSourceMessage)
        {
            trafficMessage responseMessage = new trafficMessage();

            try
            {
                string requestString  = UrlEncodeMessage(SignMessageBeforePost(requestSourceMessage));
                string responseString = HttpUtils.HttpPost(serverUrl, requestString, encodeCode);
                responseMessage = CheckSignMessageAfterResponse(UrlDecodeMessage(responseString));
            }
            catch (Exception er)
            {
                Console.WriteLine(er.ToString());
            }
            return(responseMessage);
        }
Example #7
0
        private trafficMessage SignMessageBeforePost(trafficMessage msgSource)
        {
            trafficMessage msgEncrypt = new trafficMessage();


            //获取报文字符集
            this.encodeCode     = Encoding.GetEncoding(msgSource.charset);
            msgEncrypt.charset  = msgSource.charset;
            msgEncrypt.signType = msgSource.signType;
            msgEncrypt.extend   = msgSource.extend;
            msgEncrypt.data     = msgSource.data;

            //报文签名
            msgEncrypt.sign = CryptUtils.Base64Encoder(CryptUtils.CreateSignWithPrivateKey(CryptUtils.getBytesFromString(msgSource.data, encodeCode),
                                                                                           CryptUtils.getPrivateKeyXmlFromPFX(pfxFilePath, pfxPassword)));
            return(msgEncrypt);
        }
Example #8
0
        private trafficMessage CheckSignMessageAfterResponse(trafficMessage msgEncrypt)
        {
            trafficMessage msgSource = new trafficMessage();

            //获取报文字符集
            this.encodeCode    = Encoding.GetEncoding(msgEncrypt.charset);
            msgSource.charset  = msgEncrypt.charset;
            msgSource.signType = msgEncrypt.signType;
            msgSource.extend   = msgEncrypt.extend;
            msgSource.data     = msgEncrypt.data;

            msgSource.sign = CryptUtils.VerifySignWithPublicKey(
                (CryptUtils.getBytesFromString(msgEncrypt.data, encodeCode)),
                CryptUtils.getPublicKeyXmlFromCer(cerFilePath),
                CryptUtils.Base64Decoder(msgEncrypt.sign)
                ).ToString();
            return(msgSource);
        }
Example #9
0
        public trafficMessage postMessage(string serverUrl, trafficMessage requestSourceMessage)
        {
            trafficMessage responseMessage = new trafficMessage();

            try
            {
                string requestString = UrlEncodeMessage(EncryptMessageBeforePost(requestSourceMessage));
                //log.Write("url:" + serverUrl);
                log.Write("request  ==>[" + requestString + "]");

                string responseString = HttpUtils.HttpPost(serverUrl, requestString, encodeCode);
                log.Write("response <==[" + responseString + "]");
                responseMessage = DecryptMessageAfterResponse(UrlDecodeMessage(responseString));
            }
            catch (Exception er)
            {
                log.Write(er.ToString());
            }
            return(responseMessage);
        }
Example #10
0
        public trafficMessage postMessage(string serverUrl, trafficMessage requestSourceMessage)
        {
            trafficMessage responseMessage = new trafficMessage();

            // try
            {
                string requestString = UrlEncodeMessage(SignMessageBeforePost(requestSourceMessage));
                //Console.WriteLine("url:" + serverUrl);
                Logger.Logging(loggerHeader, "request  ==>[" + requestString + "]", true);

                string responseString = HttpUtils.HttpPost(serverUrl, requestString, encodeCode);
                Logger.Logging(loggerHeader, "response <==[" + responseString + "]", true);
                responseMessage = CheckSignMessageAfterResponse(UrlDecodeMessage(responseString));
            }
            //  catch (Exception er)
            {
                //    Console.WriteLine(er.ToString());
            }
            return(responseMessage);
        }
Example #11
0
        private trafficMessage UrlDecodeMessage(string msgResponse)
        {
            trafficMessage msgEncrypt = new trafficMessage();

            string[] EncryptBody = System.Web.HttpUtility.UrlDecode(msgResponse).Split('&');
            for (int i = 0; i < EncryptBody.Length; i++)
            {
                string[] tmp = EncryptBody[i].Split('=');
                switch (tmp[0])
                {
                //需要添加引用System.Web,用于url转码,处理base64产生的+/=
                case "charset": msgEncrypt.charset = EncryptBody[i].Replace("charset=", "").Trim('"'); break;

                case "signType": msgEncrypt.signType = EncryptBody[i].Replace("signType=", "").Trim('"'); break;

                case "data": msgEncrypt.data = EncryptBody[i].Replace("data=", "").Trim('"'); break;

                case "sign": msgEncrypt.sign = EncryptBody[i].Replace("sign=", "").Trim('"'); break;

                case "extend": msgEncrypt.extend = EncryptBody[i].Replace("extend=", "").Trim('"'); break;
                }
            }
            return(msgEncrypt);
        }