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. 2016-9-6 批量给文件名的前面加上“igeek_高薪就业” 2、 利用FileInputStream和FileOutputStream复制文件

    在此只列出典型题目,有的题目扫一眼就有代码的不去浪费时间了,想要完整题目的评论留邮箱,看到就发.持续更新中... 1.批量给文件名的前面加上“igeek_高薪就业” package com.work; ...

  2. 开源软件free download manager在windows defender中报毒

    从官网上下载的fdm lite 3.9.6,从图片中可以看出安装包有数字签名,windows defender报毒,在线杀毒也检出木马,官网的程序更新到了3.9.6版本,在sourceforge上的源 ...

  3. [置顶] Jquery学习总结(二) jquery选择器详解

    1.基本选择器 l ID 根据元素ID选择 l Elementname 根据元素名称选择 l Classname 根据元素css类名选择 举例: <input type=”text” id=”I ...

  4. 关于 ActiveMQ 的消息模式

    1.JMS Queue 执行 load balancer语义:一条消息仅能被一个 consumer(消费者) 收到.如果在 message 发送的时候没有可用的consumer,那么它将被保存一直到能 ...

  5. Tomcat部署问题

    一.无法部署,访问路径报404错误,在tomcat的页面的manager app中无法启动,提示:FAIL - Application   could not....: 重新更改web.xml之后就正 ...

  6. Linux中文显示乱码解决

    输入 echo $LANG可以查看当前使用的系统语言 查看是否有中文语言包可以在终端输入 locale命令,如有zh cn 表示已经安装了中文语言 没有则 yum groupinstall chine ...

  7. mount源码分析 【转】

    转自:http://blog.chinaunix.net/uid-10769062-id-3230811.html Busybox- 在util-linux/mount.c的line:1609行首先映 ...

  8. Oracle之虚拟索引

    一.引言 DBA在日常维护管理数据库进行低性能SQL分析时,有时候需要通过创建索引对SQL进行优化,但有些时候我们创建的索引是否能用到?这个只能创建以后才能看出效果,但是在实际工作中,特别是对大表创建 ...

  9. HDU 5768:Lucky7(中国剩余定理 + 容斥原理)

    http://acm.hdu.edu.cn/showproblem.php?pid=5768 Lucky7 Problem Description   When ?? was born, seven ...

  10. Mongodb 和Redis 的相同点和不同点

    MongoDB和Redis都是NoSQL,采用结构型数据存储.二者在使用场景中,存在一定的区别,这也主要由于二者在内存映射的处理过程,持久化的处理方法不同.MongoDB建议集群部署,更多的考虑到集群 ...