工作中拓展的加密解密传输方式. 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 /** * 加密解密类 * 该算法仅支持加密数字.比较适用 ...
随机推荐
- 关于freemarker 空变量的接收以及类型转换 笔记
通常接收一个变量是${siOrganid},如果并没有这个变量,是这么处理${siOrganid!},如果这个变量是某个类属性,是这么处理${interfsrv.siOrganid!},如果这个类也是 ...
- 【oracle】生成AWR报告
[第一步]找到awrrpt.sql文件 [ora11g@vm-kvm11820-app ~]$ locate awrrpt.sql /DATA/opt/app/ora11g/product//rdbm ...
- C# autocomplete
前台代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runa ...
- BeanCopyUtil
package com.rscode.credits.util; import java.util.HashSet; import java.util.Set; import org.springfr ...
- vue 判断数组是否为空
为空:array == undefined || array.length <= 0 (顺序不能调换) 不为空: array !==undefined && array.leng ...
- js中数组常用方法总结
操作数组 印象中数组有很多方法,系统的整理一下,放在自己家里方便回头查~ Array.map() 此方法是将数组中的每个元素调用一个提供的函数,结果作为一个新的数组返回,并没有改变原来的数组 1 2 ...
- 基于C++的成功-失败法演示
确定搜索区间的一维搜索算法 求多元函数 f(x) 的最优解通常采用迭代的方法: 在可行域内任取一点 x0作为初始点,从 x0 出发,按照一定的方法,一次找到 x1,x2,x3,…,xn,…, 使得某个 ...
- STM8L LCD配置与com使用问题
void LCD_GPIO_Config(void) { //SEG GPIO Init GPIO_Init(GPIOE, GPIO_Pin_0|GPIO_Pin_1,GPIO_Mode_Out_PP ...
- bzoj 4589 FWT
#include<bits/stdc++.h> #define ll long long using namespace std; ; ; ; ; <<],b[<< ...
- 如何处理Excel空行问题
在操作excel的时候, 可能会出现很多的无效数据行. 下面是一个我的简单处理方式 public static bool DataSetToExcel(DataSet dataSet, string ...