/// <summary>
/// C#/PHP/JSP 3DES 加密与解密(只支持UTF-8编码)
/// </summary>
public class Crypto3DES
{
/// <summary>
/// 默认密钥
/// </summary>
private string Keys; /// <summary>
/// 密钥与加密字符串不足8字符时的填充字符
/// </summary>
private char paddingChar = ' '; /// <summary>
/// 实例化 Crypto3DES 类
/// </summary>
/// <param name="key">密钥</param>
public Crypto3DES(string key)
{
this.Keys = key;
} /// <summary>
/// 获取密钥,不足8字符的补满8字符,超过8字符的截取前8字符
/// </summary>
/// <param name="key">密钥</param>
/// <returns></returns>
private string GetKeyCode(string key)
{
if (key.Length > )
return key.Substring(, );
else
return key.PadRight(, paddingChar);
} /// <summary>
/// 获取加密字符串,不足8字符的补满8字符
/// </summary>
/// <param name="strString">The STR string.</param>
/// <returns></returns>
private string GetString(string strString)
{
if (strString.Length < )
return strString.PadRight(, paddingChar);
return strString;
} /// <summary>
/// 加密
/// </summary>
/// <param name="strString">加密字符串</param>
/// <returns></returns>
public string Encrypt(string strString)
{
try
{
strString = this.GetString(strString);
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = Encoding.UTF8.GetBytes(this.GetKeyCode(this.Keys));
DES.Mode = CipherMode.ECB;
DES.Padding = PaddingMode.Zeros;
ICryptoTransform DESEncrypt = DES.CreateEncryptor();
byte[] Buffer = Encoding.UTF8.GetBytes(strString);
return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, , Buffer.Length));
}
catch (Exception ex) { return ex.Message; }
} /// <summary>
/// 解密
/// </summary>
/// <param name="strString">解密字符串</param>
/// <returns></returns>
public string Decrypt(string strString)
{
try
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = Encoding.UTF8.GetBytes(this.GetKeyCode(this.Keys));
DES.Mode = CipherMode.ECB;
DES.Padding = PaddingMode.Zeros;
ICryptoTransform DESDecrypt = DES.CreateDecryptor();
byte[] Buffer = Convert.FromBase64String(strString);
return UTF8Encoding.UTF8.GetString(DESDecrypt.TransformFinalBlock(Buffer, , Buffer.Length)).Replace("\0", "").Trim();
}
catch (Exception ex) { return ex.Message; }
} #region DESEnCode DESDeCode
/// <summary>
/// 加密 与Java通用加密
/// </summary>
/// <param name="pToEncrypt">需要加密的字符</param>
/// <param name="cryptKey">密钥,8位的ASCII字符</param>
/// <returns></returns>
public string DESEnCode(string pToEncrypt)
{
if (string.IsNullOrEmpty(pToEncrypt)) return string.Empty; try
{
pToEncrypt = System.Web.HttpContext.Current.Server.UrlEncode(pToEncrypt);
string key = this.Keys; DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.GetEncoding("UTF-8").GetBytes(pToEncrypt);
des.Key = ASCIIEncoding.ASCII.GetBytes(key);
des.IV = ASCIIEncoding.ASCII.GetBytes(key);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, , inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
} cs.Close();
cs.Dispose();
ms.Close();
ms.Dispose(); return ret.ToString();
}
catch (System.Exception ex)
{
return ex.Message;
} }
/// <summary>
/// 解密数据 与Java通用解密
/// </summary>
/// <param name="pToEncrypt">解密的字符</param>
/// <param name="cryptKey">密钥,8位的ASCII字符</param>
/// <returns></returns>
public string DESDeCode(string pToEncrypt)
{
if (string.IsNullOrEmpty(pToEncrypt)) return string.Empty; try
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider(); int len = pToEncrypt.Length / ;
byte[] inputByteArray = new byte[len];
int x, i; for (x = ; x < len; x++)
{
i = Convert.ToInt32(pToEncrypt.Substring(x * , ), );
inputByteArray[x] = (byte)i;
} string key = this.Keys; des.Key = ASCIIEncoding.ASCII.GetBytes(key);
des.IV = ASCIIEncoding.ASCII.GetBytes(key);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, , inputByteArray.Length);
cs.FlushFinalBlock(); string ret = System.Web.HttpContext.Current.Server.UrlDecode(System.Text.Encoding.Default.GetString(ms.ToArray())); cs.Close();
cs.Dispose();
ms.Close();
ms.Dispose(); return ret;
}
catch (System.Exception ex)
{
return ex.Message;
}
}
#endregion
}
Crypto3DES des = new Crypto3DES("key");

3DES加密/解密的更多相关文章

  1. iOS 3DES加密解密(一行代码搞定)

    3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计 ...

  2. 简进祥==iOS 3DES加密解密

    3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计 ...

  3. C# Java 3DES加密解密 扩展及修正\0 问题

    注: C#已亲测及做扩展, Java 部分未做验证 /// <summary> /// 3DES加密解密 /// ------------------------------------- ...

  4. 【推荐】JAVA基础◆浅谈3DES加密解密

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  5. 3DES加密解密

    C#3DES加密解密,JAVA.PHP可用 using System; using System.Security.Cryptography; using System.Text; namespace ...

  6. Des与3Des加密解密

    /// <summary> /// Des和3Des算法 /// </summary> public class Des { /// <summary> /// D ...

  7. C#的3DES加密解密算法

    C#类如下: using System; using System.Collections.Generic; using System.Text; using System.Security.Cryp ...

  8. JAVA和C# 3DES加密解密

    最近 一个项目.net 要调用JAVA的WEB SERVICE,数据采用3DES加密,涉及到两种语言3DES一致性的问题, 下面分享一下, 这里的KEY采用Base64编码,便用分发,因为Java的B ...

  9. JAVA安卓和C# 3DES加密解密的兼容性问题(2013年8月修改版)

    近 一个项目.net 要调用JAVA的WEB SERVICE,数据采用3DES加密,涉及到两种语言3DES一致性的问题, 下面分享一下, 这里的KEY采用Base64编码,便用分发,因为Java的By ...

  10. Java中3DES加密解密与其他语言(如C/C++)通信

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

随机推荐

  1. UVALive - 6257 K - Chemist's vows 【DFS】【BFS】【DP】

    题目链接 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  2. sublime-text 键绑定

    vim 和 emacs 是牛人们的两大神器,sublime-text则是每个人的编程利器. 先说一下本人的感受,vim用了一段时间,emacs也小试了一下,两大神器尽是各种命令,另人眼花缭乱. 但是有 ...

  3. 07 09&10

    0709: 排名还是不高,毕竟没切出来题. 第一题dalao: 要求你做一个三维数点,只回答最终有多少个点对的状态是完全小于(可比?)的.(n<=2000000) 特殊限制是三维都是随机排列. ...

  4. mini2440移植uboot 2014.04(二)

    我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git 参考文章: <u-boot-2011 ...

  5. Linux 创建Bridge

    安装Bridge工具软件包 Linux可以工作在网桥模式,必须安装网桥工具bridge-utils,运行命令: yum install bridge-utils 或 apt-get install b ...

  6. django 使用内建过滤器实现文章摘要效果

    django 使用内建过滤器实现文章摘要效果 前端html代码 <div class="list-group"> {% if articles %} {% for ar ...

  7. 分享知识-快乐自己:Spring整合定时器

    前期工作:(引入相关 JAR ) <spring.quartz>1.8.4</spring.quartz> <!--spring 定时--> <depende ...

  8. 分享知识快乐自己:Layui 常用样式

    下载 样式包  Layui  layer 引入 js 及 样式: <link rel="stylesheet" href="${ctx}/static/layui/ ...

  9. BEC listen and translation exercise 39

    What about jigsaw puzzle design for visually handicapped?给视觉障碍人士设计拼图怎么样? Length is 50cm, and then th ...

  10. 利用Python进行文章特征提取(二)

    本篇blog是利用Python进行文章特征提取的续篇,主要介绍构建带TF-IDF权重的文章特征向量. In [1]: # 带TF-IDF权重的扩展词库 # 在第一篇文档里 主要是利用词库模型简单判断单 ...