工作中拓展的加密解密传输方式. DES对称加密传输.
系统间通过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对称加密传输.的更多相关文章
- php中des加密解密 匹配C#des加密解密 对称加密
原文:php中des加密解密 匹配C#des加密解密 对称加密 网上找来的 php des加密解密 完全匹配上一篇C# 字符串加密解密函数 可以用于C#和php通信 对数据进行加密,其中$key 是 ...
- DotNet加密方式解析--对称加密
离过年又近了一天,回家已是近在咫尺,有人欢喜有人愁,因为过几天就得经历每年一度的装逼大戏,亲戚朋友加同学的各方显摆,所以得靠一剂年终奖来装饰一个安稳的年,在这里我想起了一个题目“论装逼的技术性和重要性 ...
- 重新想象 Windows 8 Store Apps (31) - 加密解密: 哈希算法, 对称算法
原文:重新想象 Windows 8 Store Apps (31) - 加密解密: 哈希算法, 对称算法 [源码下载] 重新想象 Windows 8 Store Apps (31) - 加密解密: 哈 ...
- Java和.NET使用DES对称加密的区别
Java和.NET的系统类库里都有封装DES对称加密的实现方式,但是对外暴露的接口却各不相同,甚至有时会让自己难以解决其中的问题,比如Java加密后的结果在.NET中解密不出来等,由于最近项目有跨Ja ...
- cocos2dx图片加密解密(npk方式)
话不多说,直接开始: 准备的工具: 链接:https://pan.baidu.com/s/1Om4kBNWcG2jL_RTsHqqzpQ 提取码:bv7i npkCreate.exe是加密图片的工具, ...
- .NET中的DES对称加密
DES是一种对称加密(Data Encryption Standard)算法,于1977年得到美国政府的正式许可,是一种用56位密钥来加密64位数据的方法.一般密码长度为8个字节,其中56位加密密钥, ...
- C# DES对称加密解密
/// <summary> /// 加密 /// </summary> /// <param name="str"></param> ...
- Linux下OpenSSL加密解密压缩文件(AES加密压缩文件)
OpenSSL是一个开源的用以实现SSL协议的产品,它主要包括了三个部分:密码算法库.应用程序.SSL协议库.Openssl实现了SSL协议所需要的大多数算法.下面介绍使用Openssl进行文件的对称 ...
- PHP加密解密数字,适用于URL加密。
本博主最近正在建设一个9元包邮的网站,希望各位光临指导一些意见: 9元包邮 http://www.jiubaou.com/ <?php /** * 加密解密类 * 该算法仅支持加密数字.比较适用 ...
随机推荐
- Datediff的使用(统计本日,昨日,本周,本月)
//统计本日,昨日,本周,本月添加的产品总数 //日期 DateTime DT = DateTime.Now; string day=DT.Date.ToS ...
- UpdatePanel 控件,客户端事件生命周期踩坑
<script type="text/javascript" language="javascript"> Sys.WebForms.PageReq ...
- Netty 基本组件与线程模型
Netty 的学习内容主要是围绕 TCP 和 Java NIO 这两个点展开的,由于 Netty 是基于 Java NIO 的 API 之上构建的网络通讯框架,Java NIO 中的几个组件,都能在 ...
- JS 获取图片标签和所有的图片中的src的正则表达式
var imgReg = /<img.*?(?:>|\/>)/gi; //匹配所有img标签的正则表达式规则 var srcReg = /src=[\'\"]?([^\'\ ...
- TypeScript 类型定义文件(*.d.ts)自动生成工具
在开发ts时,有时会遇到没有d.ts文件的库,同时在老项目迁移到ts项目时也会遇到一些文件需要自己编写声明文件,但是在需要的声明文件比较多的情况,就需要自动生产声明文件.用过几个库.今天简单记录一下. ...
- 安装并激活pycharm
进入 pycharm官网 https://www.jetbrains.com/pycharm/ 或直接百度pycharm进入官网 点击download now 下载专业版: 点击保存文件: 双击 py ...
- tp3.2小结(1)
入口文件:index.php目录结构:核心,Thinkphp 公共资源,public jq 上传的图片等 应用目录,application 房模块 common:基于模块的公共目录,公共函数命名:类: ...
- CentOS7下MySQL5.7安装配置方法图文教程(YUM)
安装环境:CentOS7 64位,MySQL5.7 1.配置YUM源 在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo/yum/ # ...
- HOMEWORK1
回顾你过去将近3年的学习经历 当初你报考的时候是真正喜欢计算机这个专业吗? 当初报考的时候是选择英语和计算机专业,报英语那个学校没去上,就来学了计算机,对计算机专业的感觉介于喜欢和热爱之间,就是说还是 ...
- 那些年,很多人没看懂的Python内置函数
Python之所以特别的简单就是因为有很多的内置函数是在你的程序"运行之前"就已经帮你运行好了,所以,可以用这个的特性简化很多的步骤.这也是让Python语言变得特别的简单的原因之 ...