3DES加密/解密
/// <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加密/解密的更多相关文章
- iOS 3DES加密解密(一行代码搞定)
3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计 ...
- 简进祥==iOS 3DES加密解密
3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计 ...
- C# Java 3DES加密解密 扩展及修正\0 问题
注: C#已亲测及做扩展, Java 部分未做验证 /// <summary> /// 3DES加密解密 /// ------------------------------------- ...
- 【推荐】JAVA基础◆浅谈3DES加密解密
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- 3DES加密解密
C#3DES加密解密,JAVA.PHP可用 using System; using System.Security.Cryptography; using System.Text; namespace ...
- Des与3Des加密解密
/// <summary> /// Des和3Des算法 /// </summary> public class Des { /// <summary> /// D ...
- C#的3DES加密解密算法
C#类如下: using System; using System.Collections.Generic; using System.Text; using System.Security.Cryp ...
- JAVA和C# 3DES加密解密
最近 一个项目.net 要调用JAVA的WEB SERVICE,数据采用3DES加密,涉及到两种语言3DES一致性的问题, 下面分享一下, 这里的KEY采用Base64编码,便用分发,因为Java的B ...
- JAVA安卓和C# 3DES加密解密的兼容性问题(2013年8月修改版)
近 一个项目.net 要调用JAVA的WEB SERVICE,数据采用3DES加密,涉及到两种语言3DES一致性的问题, 下面分享一下, 这里的KEY采用Base64编码,便用分发,因为Java的By ...
- Java中3DES加密解密与其他语言(如C/C++)通信
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
随机推荐
- java 死锁产生原因及解锁(转)
原文地址 进程死锁及解决办法 一.要点提示 (1) 掌握死锁的概念和产生死锁的根本原因. (2) 理解产生死锁的必要条件--以下四个条件同时具备:互斥条件.不可抢占条件.占有且申请条件.循环等待条件. ...
- 关于date和String互相转换的问题
其实原理很简单,就是将String类型的变量使用SimpleDateFormat来转换成Date,然后用getTime()方法比较 SimpleDateFormat sdf = new SimpleD ...
- 【leetcode刷题笔记】Single Number
题目: Given an array of integers, every element appears twice except for one. Find that single one. No ...
- 前端基础-CSS属性操作
前端基础-CSS属性操作 css text 文本颜色:color 颜色属性被用来设置文字的颜色. 颜色是通过CSS最经常的指定: 十六进制值 - 如: #FF0000 一个RGB值 - 如: RGB( ...
- Python 核心编程 课后习题 第五章
2. 操作符. (a) 写一个函数, 计算并返回两个数的乘积. (b) 写一段代码调用这个函数, 并显示它的结果. def multi(a,b): return a * b result = mult ...
- Android 4.4 U盘挂载【转】
本文转载自:https://blog.csdn.net/mill_li/article/details/50134301 在Android4.4系统下,ES文件浏览器读取不到U盘,但是在设置-> ...
- show processlist,sysbench压力测试工具
processlist.sh 记录数据库的状态 #!/bin/bash while true do mysql -uroot -pwangxiaohu -e 'show processlist\G'| ...
- Entity Framework 学习笔记(一)之数据模型 数据库
关于Entity Framework 数据模型 的开发有三种模式:1.引用数据库方式:2.在VS中新建EF空模型Model 方式:3.Code 方式 Entity Framework 数据模型 ...
- 访问虚拟机中的架设的Web服务器
环境: 1.虚拟机中安装了CentOS,虚拟机使用NAT的方式 2.在CentOS中安装了APACHE 并且使用 http://127.0.0.1可以正常访问,通过ifconfig查到IP地址是 19 ...
- matlab对点云旋转平移
1.显示茶壶点云 ptCloud = pcread('teapot.ply');figure(1)pcshow(ptCloud); title('Teapot'); 2.Create a transf ...