DES加密解密
加密后生成Base64字符串,并去除'='字符。
加密后替换掉'+',这样加密后的字符串可以作为url参数传递。
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text; namespace QuaEdu.Helper
{
/// <summary>
/// DES加密/解密类/// </summary>
public class DESHelper
{
#region 默认密钥
/// <summary>
/// 默认密钥
/// </summary>
private static readonly string m_key = "zcl";
#endregion #region ========加密========
/// <summary>
/// 加密数据
/// </summary>
/// <param name="Text">原文</param>
/// <returns>密文</returns>
public static string Encrypt(string Text)
{
return Encrypt(Text, m_key);
} /// <summary>
/// 加密数据
/// </summary>
/// <param name="Text">原文</param>
/// <param name="sKey">密钥</param>
/// <returns>密文</returns>
public static string Encrypt(string Text, string sKey)
{
DESCryptoServiceProvider desKey = new DESCryptoServiceProvider(); byte[] inputByteArray = Encoding.Default.GetBytes(Text);
byte[] keyByteArray = Encoding.Default.GetBytes(sKey); MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
md5.ComputeHash(keyByteArray); desKey.Key = HalveByteArray(md5.Hash);
desKey.IV = HalveByteArray(md5.Hash); MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, desKey.CreateEncryptor(), CryptoStreamMode.Write); cs.Write(inputByteArray, , inputByteArray.Length);
cs.FlushFinalBlock(); return Convert.ToBase64String(ms.ToArray()).Replace("=", "").Replace("+", "-").Replace("/", "*");
}
#endregion #region ========解密========
/// <summary>
/// 解密数据
/// </summary>
/// <param name="Text">密文</param>
/// <returns>原文</returns>
public static string Decrypt(string Text)
{
return Decrypt(Text, m_key);
} /// <summary>
/// 解密数据
/// </summary>
/// <param name="Text">密文</param>
/// <param name="sKey">密钥</param>
/// <returns>原文</returns>
public static string Decrypt(string Text, string sKey)
{
StringBuilder sb = new StringBuilder();
if (Text.Length % != )
{
for (int i = ; i < - Text.Length % ; i++)
{
sb.Append("=");
}
}
Text = Text.Replace("-", "+").Replace("*", "/") + sb.ToString(); DESCryptoServiceProvider desKey = new DESCryptoServiceProvider(); byte[] inputByteArray = Convert.FromBase64String(Text);
byte[] keyByteArray = Encoding.Default.GetBytes(sKey); MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
md5.ComputeHash(keyByteArray); desKey.Key = HalveByteArray(md5.Hash);
desKey.IV = HalveByteArray(md5.Hash); MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, desKey.CreateDecryptor(), CryptoStreamMode.Write); cs.Write(inputByteArray, , inputByteArray.Length);
cs.FlushFinalBlock(); return Encoding.Default.GetString(ms.ToArray());
}
#endregion #region 把字节数组缩短一半
/// <summary>
/// 把字节数组缩短一半
/// </summary>
private static byte[] HalveByteArray(byte[] data)
{
byte[] result = new byte[data.Length / ]; for (int i = ; i < result.Length; i++)
{
int x = (data[i * ] + data[i * + ]) / ;
result[i] = (byte)x;
} return result;
}
#endregion }
}
DES加密解密的更多相关文章
- php使用openssl进行Rsa长数据加密(117)解密(128) 和 DES 加密解密
PHP使用openssl进行Rsa加密,如果要加密的明文太长则会出错,解决方法:加密的时候117个字符加密一次,然后把所有的密文拼接成一个密文:解密的时候需要128个字符解密一下,然后拼接成数据. 加 ...
- des加密解密——java加密,php解密
最近在做项目中,遇到des加密解密的问题. 场景是安卓app端用des加密,php这边需要解密.之前没有接触过des这种加密解密算法,但想着肯定会有demo.因此百度,搜了代码来用.网上代码也是鱼龙混 ...
- 一个java的DES加密解密类转换成C#
一个java的des加密解密代码如下: //package com.visionsky.util; import java.security.*; //import java.util.regex.P ...
- Golang之AES/DES加密解密
AES/DES加密/解密涉及4个概念:1. Block, 也叫分组, 相应加密/解密的算法. 2. BlockMode, 模式, 相应加密/解密的处理.3. InitalVectory, 初始向量4. ...
- java 实现 DES加密 解密算法
DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个字节共64位,是DES算法的工作密钥:Data也为8个字节64位,是要被加密或被解密的数据:Mode为DES的工作方式,有两种: ...
- 兼容PHP和Java的des加密解密代码分享
这篇文章主要介绍了兼容PHP和Java的des加密解密代码分享,适合如服务器是JAVA语言编写,客户端是PHP编写,并需要des加密解密的情况,需要的朋友可以参考下 作为一个iOS工程师来解决安卓的问 ...
- php实现和c#一致的DES加密解密
原文:php实现和c#一致的DES加密解密 php实现和c#一致的DES加密解密,可以从网上搜到一大堆,但是测试后发现都没法用.以下正确代码是我经过苦苦才找到的.希望大家在系统整合时能用的上. 注意: ...
- 各种加密解密函数(URL加密解密、sha1加密解密、des加密解密)
原文:各种加密解密函数(URL加密解密.sha1加密解密.des加密解密) 普通hash函数如md5.sha1.base64等都是不可逆函数.虽然我们利用php可以利用这些函数写出可逆函数来.但是跨语 ...
- php中des加密解密 匹配C#des加密解密 对称加密
原文:php中des加密解密 匹配C#des加密解密 对称加密 网上找来的 php des加密解密 完全匹配上一篇C# 字符串加密解密函数 可以用于C#和php通信 对数据进行加密,其中$key 是 ...
随机推荐
- 【C语言学习】《C Primer Plus》第5章 运算符、表达式和语句
学习总结 1.有了一定的语言基础,运算符和表达式这些都大同小异,无外乎赋值运算符(=).算术运算符(+.-.*./.%.++.——)和其他的一下运算符(sizeof.(type)). 2.声明一个参数 ...
- Android怎么找到最优适配资源
当我们将一些提供了不同的资源文件可供Android系统选择的时候,Android会在运行时会根据一套适配的规则选择最符合当前配置的资源.为了说明Android怎么选择资源,假设我们有以下可选的资源文件 ...
- [体感游戏] 1、MPU6050数据采集传输与可视化
最近在研究体感游戏,到目前为止实现了基于51单片机的MPU6050数据采集.利用蓝牙模块将数据传输到上位机,并利用C#自制串口数据高速采集软件,并且将数据通过自制的折线图绘制模块可视化地展示出来等功能 ...
- Unity3D使用经验总结 编辑器扩展篇
一个引擎,最重要的就是工具,工具除了提升开发速度,提供可视化操作环境以外,还带了容错功能. 它使得大家的工作局限在一定的范围内,比如一个变量的配置,或者是一些类型的选择. 使用编辑器,使得既使不太明白 ...
- JVM的SNMP监控配置
近期看了一下JVM对监控的支持,除了常规的JMX外居然还有SNMP, 有点意思, 这个网管协议适配的地方还真多,那么就先测试一下. 先随便找一个能在后台持续运行的java小程序,如我手头的BIO的so ...
- PLoP(Pattern Languages of Programs,程序设计的模式语言)
2014/8/1 12:24:21潘加宇 http://www.umlchina.com/News/Content/340.htmPloP大会2014即将举行 PLoP(Pattern Languag ...
- 纯CSS实现3D按钮效果
今天分享一个用纯CSS实现的3D按钮.css巧妙利用了box-shadow来实现3D物体的立体感,当按钮按下的时候再去修改box-shadow和top值.让人感觉有一种按钮被按下的感觉.css代码非常 ...
- 我的Eclipse快捷键.
所谓“工欲善其事必先利其器”,程序写多了,对于快捷键总有些特别的偏爱.在众多编辑器中,Eclipse算是用的比较多,也是最熟的. 最常用(也是最爱的:)) Ctrl+’ : 自动完成提示.这个快捷键 ...
- 关于BUG率的计算和它的实际意义的思考
我的微信号是Shalayang,以下是我的二维码名片,欢迎添加. 问题1:bug率有什么作用? my opion:用处有很多,需要具体情况具体分析,不过主要作用一般是来评价工作产品的质量.如果bug率 ...
- Sqlserver 中exists 和 in
如图,现在有两个数据集,左边表示#tempTable1,右边表示#tempTable2.现在有以下问题: 1.求两个集的交集? 2.求tempTable1中不属于集#tempTable2的集? 先创建 ...