工作中拓展的加密解密传输方式. 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 /** * 加密解密类 * 该算法仅支持加密数字.比较适用 ...
随机推荐
- QEMU模拟器Windows版本模拟ARMX86CPU指令
http://qemu.weilnetz.de/ QEMU Binaries for Windows
- Error running second Activity: The activity must be exported or contain an intent-filter
编译能成功,但是在虚拟机或真机上面调试时,弹出这个错误 后来查了一下,要在 AndroidManifest.xml 中,把每个窗口都加上一句 android:exported="true&q ...
- 【Python】批量修改指定目录下所有文件的文件名/后缀
[删除.txt文件的后缀] import os, shutil #rootdir = input("请输入文件路径(结尾加上/):") #fileList = os.listdir ...
- HTTP Post multipart/form-data支持
最近需要向平台发送录像文件,但是Skynet没有multipart/form-data的Post请求支持,写篇blog记录一下 skynet有自带简单的httpc,里面有post方法.但是这个post ...
- 同步I/O、异步I/O与阻塞I/O、非阻塞I/O的区别
一.I/O I/O (Input/Output,输入/输出)即数据的读取(接收)或写入(发送)操作. 通常用户进程中的一个完整I/O分为两阶段:用户进程空间<-->内核空间.内核空间< ...
- Matlab rgb2hsv
>> im = imread('lake.jpg');>> imshow(im)>> hsv_im = rgb2hsv(im);>> imshow(hs ...
- 第四次SCRUM任务
一.第四次SCRUM任务 继第三次的任务之后,对最终的部署做一定的完善,以及系统的BUG调试,压力测试,会议明确最终的方案. 二.用户故事 1.用户可以进行输入用户名密码登录和注册. 2.用户可以在程 ...
- js处理数字加后缀w
num > 9999 ? (Math.floor(num/1000)/10) + 'w' : num
- ubuntu常见问题解决方法
系统版本:ubuntu 18.04 lts 电脑:拯救者y7000 1.开机卡屏 无法进如 这可能是没安装英伟达显卡驱动,在grub 界面在 splash 后面添加 nomodeset 即可进入桌面 ...
- EBS WEBADI导入日记账 客户化账户组合规则校验
近期项目需求对EBS中WEBADI导入日记账时,在加载数据时需要对账户组合额外进行客户化的校验,需要能够做到将校验结果体现在WEBADI模板的数据上,并且对每条错误数据都单独报错. 项目上的方案是调整 ...