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); }
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); }
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); }
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)); }
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)); }
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); }
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); }
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); }
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); }
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); }
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); }