系統間經過xml傳輸, 不能採用明文, 就加密傳輸. 祕鑰(真正有效的是前8位)存儲於配置中.
javascript
public static string EncryptStr(this string content, string desKey) { string result; try { if (string.IsNullOrEmpty(desKey)) { result = content; } else { DESCryptoServiceProvider dESCryptoServiceProvider = new DESCryptoServiceProvider(); dESCryptoServiceProvider.Mode = CipherMode.ECB; byte[] array = new byte[8]; if (desKey.Length < 8) { byte[] bytes = Encoding.UTF8.GetBytes(desKey); for (int i = 0; i < array.Length; i++) { if (bytes.Length > i) { array[i] = bytes[i]; } else { array[i] = 0; } } } else { array = Encoding.UTF8.GetBytes(desKey.Substring(0, 8)); } dESCryptoServiceProvider.Key = array; dESCryptoServiceProvider.IV = dESCryptoServiceProvider.Key; byte[] bytes2 = Encoding.UTF8.GetBytes(content); MemoryStream memoryStream = new MemoryStream(); CryptoStream cryptoStream = new CryptoStream(memoryStream, dESCryptoServiceProvider.CreateEncryptor(), CryptoStreamMode.Write); cryptoStream.Write(bytes2, 0, bytes2.Length); cryptoStream.FlushFinalBlock(); StringBuilder stringBuilder = new StringBuilder(); byte[] array2 = memoryStream.ToArray(); for (int j = 0; j < array2.Length; j++) { byte b = array2[j]; stringBuilder.Append(b.ToString()); stringBuilder.Append("_"); } if (stringBuilder.Length > 0) { stringBuilder = stringBuilder.Remove(stringBuilder.Length - 1, 1); } result = stringBuilder.ToString(); } } catch (Exception) { result = content; } return result; } --- 以下解密方法: public static string DecryptStr(this string content, string desKey) { string result; try { if (string.IsNullOrEmpty(desKey)) { result = content; } else { DESCryptoServiceProvider dESCryptoServiceProvider = new DESCryptoServiceProvider(); dESCryptoServiceProvider.Mode = CipherMode.ECB; byte[] array = new byte[8]; if (desKey.Length < 8) { byte[] bytes = Encoding.UTF8.GetBytes(desKey); for (int i = 0; i < array.Length; i++) { if (bytes.Length > i) { array[i] = bytes[i]; } else { array[i] = 0; } } } else { array = Encoding.UTF8.GetBytes(desKey.Substring(0, 8)); } dESCryptoServiceProvider.Key = array; dESCryptoServiceProvider.IV = dESCryptoServiceProvider.Key; string[] array2 = content.Split(new char[] { '_' }); byte[] array3 = new byte[array2.Length]; for (int j = 0; j < array2.Length; j++) { array3[j] = Convert.ToByte(array2[j]); } MemoryStream memoryStream = new MemoryStream(); CryptoStream cryptoStream = new CryptoStream(memoryStream, dESCryptoServiceProvider.CreateDecryptor(), CryptoStreamMode.Write); cryptoStream.Write(array3, 0, array3.Length); cryptoStream.FlushFinalBlock(); Encoding encoding = new UTF8Encoding(); result = encoding.GetString(memoryStream.ToArray()); } } catch (Exception) { result = ""; } return result; }
相應的調用發送WebRequest 方法:java
//<add key="DataPushEncryptKey" value="XXXXXXXXXX"/> //POST 方式, 爲了兼容可能的Get傳輸. 接收XML參數. if (!string.IsNullOrEmpty(XML)) XML = Request.Params["XML"]; //若是設置了加密key則加密數據 if (!string.IsNullOrEmpty(XXX.DataPushEncryptKey)) XML = XML.DecryptStr(XXX.DataPushEncryptKey); //<add key="pushDataToXXX" value="XXX/XXX/XXX/XXXXX"/> // <add key="EncryptKey" value="xxxxxxxxxxx"/> --以下同步發送方法: public static string CreatePostXXXHttpResponse(string data) { string backstr = string.Empty; ; try { //獲取發送地址 string url = ConfigurationManager.AppSettings["pushDataToXXX"]; string allStr = System.Web.HttpUtility.UrlEncode(data, System.Text.Encoding.UTF8); //若是設置了加密key則加密數據 if (!string.IsNullOrEmpty(XXXEncryptKey)) allStr = allStr.EncryptStr(XXXEncryptKey); //把參數轉成byte byte[] bufferB = Encoding.UTF8.GetBytes(allStr); //構建HttpWebRequest,併發送 System.Net.ServicePointManager.DefaultConnectionLimit = 200; HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(url); WebReq.Method = "POST"; WebReq.ContentType = "application/x-www-form-urlencoded"; WebReq.ContentLength = allStr.Length; Stream PostData = WebReq.GetRequestStream(); PostData.Write(bufferB, 0, bufferB.Length); PostData.Close(); //接收返回結果 HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse(); StreamReader sr = new StreamReader(WebResp.GetResponseStream(), System.Text.Encoding.UTF8); backstr = sr.ReadToEnd(); backstr = HttpUtility.UrlDecode(backstr); } catch (Exception e) { return backstr + "</br>" + e.Message; } return backstr; }