3DES 加解密
using System; using System.IO;
using System.Security.Cryptography;
using System.Text; namespace Common
{
/// <summary>
/// 采用 3DES 加解密方式。
/// </summary>
public class EncryptAndDecrypte
{
static string strKey = "fdbc4y6hdhKlf4M3mjgGrMC3PbryXrxw";
static string strIV = "RfnMfrpec48=";
/// <summary>
/// 默认加密字符串。
/// </summary>
/// <param name="ConnString"></param>
/// <returns></returns>
public static string EncryptString(string encryptString)
{
if (string.IsNullOrWhiteSpace(encryptString)) return encryptString; return Convert.ToBase64String(EncryptAndDecrypte.EncryptString(
encryptString,
Convert.FromBase64String(strKey),
Convert.FromBase64String(strIV)
)
);
} /// <summary>
/// 默认解密字符串
/// </summary>
/// <param name="EncryptedConnectionString"></param>
/// <returns></returns>
public static string DecrypteString(string EncryptedConnectionString)
{
if (string.IsNullOrWhiteSpace(EncryptedConnectionString)) return EncryptedConnectionString; return EncryptAndDecrypte.DecrypteString(
Convert.FromBase64String(EncryptedConnectionString),
Convert.FromBase64String(strKey),
Convert.FromBase64String(strIV)
).TrimEnd('\0');
}
/// <summary>
/// 使用指定的 Key 和 IV 加密 。
/// </summary>
/// <param name="ToEncryptString"></param>
/// <param name="byKey"></param>
/// <param name="byIV"></param>
/// <returns></returns>
private static byte[] EncryptString(string ToEncryptString, byte[] byKey, byte[] byIV)
{
if (string.IsNullOrWhiteSpace(ToEncryptString)) return null; MemoryStream memStm = new MemoryStream();
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); CryptoStream encStream = null;
encStream = new CryptoStream(
memStm, tdes.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write
); byte[] byIn = Encoding.Default.GetBytes(ToEncryptString);
encStream.Write(byIn, , byIn.Length);
encStream.FlushFinalBlock();
encStream.Close();
return memStm.ToArray();
} /// <summary>
/// 使用指定的 Key 和 IV 解密。
/// </summary>
/// <param name="byIn"></param>
/// <param name="byKey"></param>
/// <param name="byIV"></param>
/// <returns></returns>
private static string DecrypteString(byte[] byIn, byte[] byKey, byte[] byIV)
{
if (byIn == null || byIn.Length == ) return string.Empty; MemoryStream memStm = new MemoryStream(byIn);
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); CryptoStream encStream = new CryptoStream(
memStm, tdes.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read
); byte[] fromEncrypt = new byte[byIn.Length];
encStream.Read(fromEncrypt, , fromEncrypt.Length);
encStream.Close(); string strRet = Encoding.Default.GetString(fromEncrypt);
return strRet;
} /// <summary>
/// 获取随机(种子是 GUID 的 Byte 的和)长度的Byte数组.
/// </summary>
/// <param name="Len">要得到的数组的长度</param>
/// <returns></returns>
private static byte[] GetBytes(int Len)
{
int Seed = ;
byte[] bySeed = Guid.NewGuid().ToByteArray(); foreach (byte byt in bySeed)
{
Seed += byt;
} byte[] byKey = new byte[Len];
new Random(Seed).NextBytes(byKey);
return byKey;
} /// <summary>
/// 获取 Key 和 IV , 如果失败,返回null。
/// </summary>
/// <param name="Key"></param>
/// <param name="IV"></param>
public static void TryGetKeyAndIV(out byte[] Key, out byte[] IV)
{
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); for (int i = ; i > ; i--)
{
try
{
Key = GetBytes(i);
IV = GetBytes(i);
tdes.CreateDecryptor(Key, IV);
return;
}
catch
{
}
}
Key = null;
IV = null;
return;
}
}
}
3DES 加解密的更多相关文章
- PHP版3DES加解密类
<?php /** * * PHP版3DES加解密类 * * 可与java的3DES(DESede)加密方式兼容 * * @Author:蓝凤(ilanfeng.com) * * @versio ...
- 3DES加解密【示例】
代码 /** * 3DES加解密 */ public class DESedeUtils { private static final String ALGORITHM_MD5 = &qu ...
- 3DES加解密 C语言
3DES(或称为Triple DES),它相当于是对每个数据块应用三次DES加密算法.3*8字节密钥. 设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代 ...
- java 与 c# 3des 加解密
java 与 c# 3des 加解密 主要差异如下: 1. 对于待加密解密的数据,各自的填充模式不一样 C#的模式有:ANSIX923.ISO10126.None.PKCS7.Zero,而Jav ...
- 3DES加解密类
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace GT.C ...
- PHP和.NET通用的加密解密函数类,均使用3DES加解密 .
以下为php代码 <PRE class=PHP name="code"> </PRE><PRE class=PHP name="code&q ...
- 3des加解密算法
编号:1003时间:2016年4月1日09:51:11功能:openssl_3des加解密算法http://blog.csdn.net/alonesword/article/details/17385 ...
- 3DES 加解密,对长度不限制
#region 3DES /// <summary> /// 3DES加密 /// </summary> /// <param name="strString& ...
- 3Des加解密 C#--->Java
Java的Byte范围为-128至127,c#的Byte范围是0-255.核心是确定Mode和Padding,关于这两个的意思可以搜索3DES算法相关文章. C#采用CBC Mode,PKCS7 Pa ...
随机推荐
- Mysql自定义函数总结
存储函数 创建存储函数,需要使用CREATE FUNCTION语句,基本语法如下: CREATE FUNCTION func_name([func_parameter]) RETURNS TYPE [ ...
- StringTokenizer类
StringTokenizer是一个用来分隔String字符串的应用类. 1.构造函数 public StringTokenizer(String str) //构造一个用来解析str的String ...
- Sublime怎样新建HTML文档
1.在右下角有个plain text的标志,点击,选择文件类型为HTML 2.保存为HTML文档 3.这时候输入"!"(注意一定要选择对输入法) 4.然后按"Tab&qu ...
- Openstack的HA解决方案【mysql集群配置】
使用mysql的galera做多主集群配置,galera的集群优势网络上面有对比,这里不在叙述. 1. 新建3台虚拟机(centos6.5) node1:172.17.44.163 node2:172 ...
- [转]通过PowerShell工具跨多台服务器执行SQL脚本
转至:http://www.cnblogs.com/SameZhao/p/4743692.html 有时候,当我们并没有合适的第三方工具(大部分需要付费)去管理多台数据库服务器,那么如何做最省力.省心 ...
- 在Dll中使用 TFDQuery 的 LoadFromStream 方法注意问题
今天又遇到一怪事, FDQuery 在服务器 savestream 传回了客户端. 客户端接收后 loadfromstream 接收都正常. 但当我把客户端封装成 dll 时,loadfromst ...
- laravel事务小例子
发生异常则自动回滚,正常则自动提交,示例如下: DB::connection('vshare')->transaction(function() use($id,$reason,$refuser ...
- CSS修改方法
1.在IE中,大部分情况下默认margin = 0px padding = 0px,但在Chrome中需要写明 在css.css文件开头加上(要加在最上面) html,body,ul,ol,li,ta ...
- oracle日期函数2!
1.日期时间间隔操作 当前时间减去7分钟的时间 select sysdate,sysdate - interval '7' MINUTE from dual 当前时间减去7小时的时间 ...
- DE1-SOC开发板上搭建NIOS II处理器运行UCOS II
DE1-SOC开发板上搭建NIOS II处理器运行UCOS II 今天在DE1-SOC的开发板上搭建NIOS II软核运行了UCOS II,整个开发过程比较繁琐,稍微有一步做的不对,就会导致整个过 ...