/// <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. Windows存储管理之磁盘类型简介

    各种操作系统连接到存储系统之后,并且操作系统识别物理磁盘之后,需要对磁盘进行进一步配置.如果用户连接存储是的Windows Server,存储管理员势必需要了解Windows中的磁盘类型与文件系统.笔 ...

  2. spring mvc入门教程 转载自【http://elf8848.iteye.com/blog/875830】

    目录  一.前言二.spring mvc 核心类与接口三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明 ...

  3. 每天一个Linux命令(17)whereis命令

    whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数,则返回所有信息.     (1)用法:   用法:    w ...

  4. VC2010编译时提示:转换到 COFF 期间失败: 文件无效或损坏

    有时候新安装好VS2010后编译时就提示上述错误,罗列一下从网上查找到的几种解决方案: 方案1: 点击“项目”-->“属性”--> “清单工具”, 然后选择"输入和输出’--&g ...

  5. [转]eclipse中的常用快捷键

    1.选中你要加注释的区域,用ctrl+shift+C 会加上//注释2.先把你要注释的东西选中,用shit+ctrl+/ 会加上注释3.要修改在eclispe中的命令的快捷键方式我们只需进入windo ...

  6. 【leetcode刷题笔记】Edit Distance

    Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...

  7. PHP常用正则验证

    手机号,身份证,ip验证 //正则验证手机号 正确返回 true function preg_mobile($mobile) { if(preg_match("/^1[34578]\d{9} ...

  8. Spring Cloud之ZuulFilter拦截请求参数

    过滤器放到网关: package com.toov5.filter; import javax.servlet.http.HttpServletRequest; import org.apache.c ...

  9. Blog迁移至Jekyll

    后续的Blog都将在 http://zhwbqd.github.io/ 为您呈现

  10. CSS重置 reset.css

    1. [文件] reset.css ~/*------------------------------------------* site:ifnoif.net* Style author:ifnoi ...