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 加解密的更多相关文章

  1. PHP版3DES加解密类

    <?php /** * * PHP版3DES加解密类 * * 可与java的3DES(DESede)加密方式兼容 * * @Author:蓝凤(ilanfeng.com) * * @versio ...

  2. 3DES加解密【示例】

    代码 /**  * 3DES加解密  */ public class DESedeUtils {     private static final String ALGORITHM_MD5 = &qu ...

  3. 3DES加解密 C语言

    3DES(或称为Triple DES),它相当于是对每个数据块应用三次DES加密算法.3*8字节密钥. 设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代 ...

  4. java 与 c# 3des 加解密

    java 与 c# 3des 加解密   主要差异如下: 1.  对于待加密解密的数据,各自的填充模式不一样 C#的模式有:ANSIX923.ISO10126.None.PKCS7.Zero,而Jav ...

  5. 3DES加解密类

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace GT.C ...

  6. PHP和.NET通用的加密解密函数类,均使用3DES加解密 .

    以下为php代码 <PRE class=PHP name="code"> </PRE><PRE class=PHP name="code&q ...

  7. 3des加解密算法

    编号:1003时间:2016年4月1日09:51:11功能:openssl_3des加解密算法http://blog.csdn.net/alonesword/article/details/17385 ...

  8. 3DES 加解密,对长度不限制

    #region 3DES /// <summary> /// 3DES加密 /// </summary> /// <param name="strString& ...

  9. 3Des加解密 C#--->Java

    Java的Byte范围为-128至127,c#的Byte范围是0-255.核心是确定Mode和Padding,关于这两个的意思可以搜索3DES算法相关文章. C#采用CBC Mode,PKCS7 Pa ...

随机推荐

  1. 创建本地yum软件源,为本地Package安装Cloudera Manager、Cloudera Hadoop及Impala做准备

    一.包管理工具及CentOS的yum 1.包管理工具如何发现可以用的包 包管理工具依赖一系列软件源,工具下载源的信息存储在配置文件中,其位置随某包管理工具不同而变化 使用yum的RedHat/Cent ...

  2. syscolumns表中所有字段的意思

    --syscolumns表中所有字段的意思 name sysname --列名或过程参数的名称. id int --该列所属的表对象 ID,或与该参数关联的存储过程 ID. xtype tinyint ...

  3. SQLServer中在视图上使用索引(转载)

    在SQL Server中,视图是一个保存的T-SQL查询.视图定义由SQL Server保存,以便它能够用作一个虚拟表来简化查询,并给基表增加另一层安全.但是,它并不占用数据库的任何空间.实际上,在你 ...

  4. Openstack的HA解决方案【替换原有的dashboard】

    0. 进入到/etc/haproxy/conf.d/目录下 mv 015-horizon.cfg 150-timaiaas.cfg 将原有的dashboard的ha配置文件做为自己的配置文件. 1. ...

  5. Objective-C语言的面向对象特性

    Objective-C作为一种面向对象的编程语言,具有面向对象的基本特征,即:封装.继承和多态.主要介绍Objective-C中有关面向对象基本概念:类.对象.方法和属性等. 类是Objective- ...

  6. android 弹幕效果demo

    记得之前有位朋友在我的公众号里问过我,像直播的那种弹幕功能该如何实现?如今直播行业确实是非常火爆啊,大大小小的公司都要涉足一下直播的领域,用斗鱼的话来讲,现在就是千播之战.而弹幕则无疑是直播功能当中最 ...

  7. 新增PHP经典笔记

    [设置编码] header("Content-type: text/html; charset=utf-8"); 1. parse_url - 解析 URL,返回其组成部分 $ua ...

  8. ftp -i -n -v <<! 其中 -n禁止自动登录到初始连接

    <<!说明是输入.如是结束了需要再输入 !例如:ftp  -i -n -v  <<! 这里的叹号代表是ftp 命令的开始get  文件exit  !      代表ftp的命令 ...

  9. AtomicInteger类保证线程安全的用法

    J2SE 5.0提供了一组atomic class来帮助我们简化同步处理.基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增.减.赋值(更新)操作 ...

  10. 【转】Eclipse Console 加大显示的行数,禁止弹出

    转载地址:http://blog.csdn.net/leidengyan/article/details/5686691 Eclipse Console 加大显示的行数: 在 Preferences- ...