系统间通过xml传输, 不能采用明文, 就加密传输. 秘钥(真正有效的是前8位)存储于配置中.

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 方法:


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

工作中拓展的加密解密传输方式. DES对称加密传输.的更多相关文章

  1. php中des加密解密 匹配C#des加密解密 对称加密

    原文:php中des加密解密 匹配C#des加密解密 对称加密 网上找来的 php des加密解密 完全匹配上一篇C# 字符串加密解密函数  可以用于C#和php通信 对数据进行加密,其中$key 是 ...

  2. DotNet加密方式解析--对称加密

    离过年又近了一天,回家已是近在咫尺,有人欢喜有人愁,因为过几天就得经历每年一度的装逼大戏,亲戚朋友加同学的各方显摆,所以得靠一剂年终奖来装饰一个安稳的年,在这里我想起了一个题目“论装逼的技术性和重要性 ...

  3. 重新想象 Windows 8 Store Apps (31) - 加密解密: 哈希算法, 对称算法

    原文:重新想象 Windows 8 Store Apps (31) - 加密解密: 哈希算法, 对称算法 [源码下载] 重新想象 Windows 8 Store Apps (31) - 加密解密: 哈 ...

  4. Java和.NET使用DES对称加密的区别

    Java和.NET的系统类库里都有封装DES对称加密的实现方式,但是对外暴露的接口却各不相同,甚至有时会让自己难以解决其中的问题,比如Java加密后的结果在.NET中解密不出来等,由于最近项目有跨Ja ...

  5. cocos2dx图片加密解密(npk方式)

    话不多说,直接开始: 准备的工具: 链接:https://pan.baidu.com/s/1Om4kBNWcG2jL_RTsHqqzpQ 提取码:bv7i npkCreate.exe是加密图片的工具, ...

  6. .NET中的DES对称加密

    DES是一种对称加密(Data Encryption Standard)算法,于1977年得到美国政府的正式许可,是一种用56位密钥来加密64位数据的方法.一般密码长度为8个字节,其中56位加密密钥, ...

  7. C# DES对称加密解密

    /// <summary> /// 加密 /// </summary> /// <param name="str"></param> ...

  8. Linux下OpenSSL加密解密压缩文件(AES加密压缩文件)

    OpenSSL是一个开源的用以实现SSL协议的产品,它主要包括了三个部分:密码算法库.应用程序.SSL协议库.Openssl实现了SSL协议所需要的大多数算法.下面介绍使用Openssl进行文件的对称 ...

  9. PHP加密解密数字,适用于URL加密。

    本博主最近正在建设一个9元包邮的网站,希望各位光临指导一些意见: 9元包邮 http://www.jiubaou.com/ <?php /** * 加密解密类 * 该算法仅支持加密数字.比较适用 ...

随机推荐

  1. Altium Designer 10如何导出SMT加工信息和BOM元件清单

    要委托工厂进行SMT加工,需要向工厂提供表贴元器件的位置信息(Pick Place),这些信息可以由csv保存下来. 步骤如下: 一.设定坐标原点,一般设为板子左下角,在Keepout划线的顶点处. ...

  2. Masonry学习札记

    Masnory学习札记 在之前的文章里有草草提到过Masonry自动布局,可这么重要第三方布局框架的怎么可以怎么随便带过呢!昨天在完成页面的时候刚好遇到了被Masorny功能惊叹的部分,所以趁热打铁写 ...

  3. VB中获取网页数据

    以下是在Microsoft Visual Basic 6.0 中文版下做的 VB可以抓取网页数据,所用的控件是Inet控件. 第一步:单击工程-->部件 选择Microsoft Internet ...

  4. vlookup使用

    数据处理过程中,需要excel进行简单的操作,比如vlookup,摸索之后,总结如下:

  5. hive最全学习线路和实践练习

    非原创,源自:https://www.cnblogs.com/snowbook/p/5723767.html hive被大多数企业使用,学习它,利于自己掌握企业所使用的技术,这里从安装使用到概念.原理 ...

  6. Javascript 3.3 编写DOM脚本的四个基本方法

    id属性的用途是给某个元素加上独一无二的标识符,搭配"#"使用 class搭配"."使用 getElementById()方法:方法名称的大小写不能写错,方法将 ...

  7. display inline or block

    一.首先要了解什么是块级元素与行级元素 块级元素 会占领页面的一行,其后多个block元素自动换行. 可以设置width,height,设置了width后同样也占领一行.同样也可以设置   margi ...

  8. JavaScript杂谈(第六天)

    js中可以使用Function创建函数 var func=new Function(); 这个对象可以将字符串转换为函数 var func=new Function("console.wri ...

  9. 20164301 Exp3 免杀原理与实践

    Exp3 免杀原理与实践  1. 实践内容 1.1 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,加壳工具,使用shellcode编程 1.2 通过组合应 ...

  10. Jrebel 配置

    先下载插件 http://139.199.89.239:1008/88414687-3b91-4286-89ba-2dc813b107ce http://jrebel.autoseasy.cn/xix ...