EncryptTransform
internal class EncryptTransform
{
//private const int c_MaxLengthOf_IV_DES = 4;
//private const int c_MaxLengthOf_IV_RC2 = 4;
//private const int c_MaxLengthOf_IV_RIJNDAEL = 8;
//private const int c_MaxLengthOf_IV_TRIPLEDES = 4;
//private const int c_MaxLengthOf_Key_DES = 4;
//private const int c_MaxLengthOf_Key_RC2 = 4;
//private const int c_MaxLengthOf_Key_RIJNDAEL_1 = 8;
//private const int c_MaxLengthOf_Key_RIJNDAEL_2 = 12;
//private const int c_MaxLengthOf_Key_TRIPLEDES_1 = 8;
//private const int c_MaxLengthOf_Key_TRIPLEDES_2 = 12; private byte[] m_Key = null; /// <summary>
/// 获取或设置加密解密过程中使用的明文密码
/// </summary>
public byte[] Key
{
get { return m_Key; }
set { m_Key = value; }
} private byte[] m_initVec = null;
/// <summary>
/// 获取或设置加密解密过程中使用的初始化向量
/// </summary>
public byte[] InitVec
{
get { return m_initVec; }
set { m_initVec = value; }
} public EncryptTransform(byte[] key, byte[] initVector)
{
this.m_Key = key;
this.m_initVec = initVector;
}
/// <summary>
/// 根据提供的枚举信息,获得需要使用的解密算法的接口
/// </summary>
/// <param name="algorithm"></param>
/// <returns></returns>
internal ICryptoTransform GetDecryptoServiceProvider(EncryptionAlgorithm algorithm)
{
switch (algorithm)
{
case EncryptionAlgorithm.Des:
{
DES des = new DESCryptoServiceProvider();
des.Mode = CipherMode.CBC;
if (this.m_Key != null)
{
des.Key = m_Key;
}
if (m_initVec != null)
{
des.IV = m_initVec;
}
return des.CreateDecryptor();
}
case EncryptionAlgorithm.Rc2:
{
RC2 rc = new RC2CryptoServiceProvider();
rc.Mode = CipherMode.CBC;
return rc.CreateDecryptor(m_Key, m_initVec);
}
case EncryptionAlgorithm.Rijndael:
{
Rijndael rijndael = new RijndaelManaged();
rijndael.Mode = CipherMode.CBC;
return rijndael.CreateDecryptor(m_Key, m_initVec);
}
case EncryptionAlgorithm.TripleDes:
{
TripleDES edes = new TripleDESCryptoServiceProvider();
edes.Mode = CipherMode.CBC;
return edes.CreateDecryptor(m_Key, m_initVec);
}
}
throw new CryptographicException("Algorithm ID '" + algorithm + "' not supported.");
} /// <summary>
/// 根据提供的枚举信息,获得需要使用的加密算法的接口
/// </summary>
/// <param name="algorithm">算法枚举</param>
/// <returns></returns>
internal ICryptoTransform GetEncryptoServiceProvider(EncryptionAlgorithm algorithm)
{ switch (algorithm)
{
case EncryptionAlgorithm.Des:
{
DES des = new DESCryptoServiceProvider();
des.Mode = CipherMode.CBC;
if (null != m_Key)
{
des.Key = m_Key;
}
else
{
m_Key = des.Key;
}
if (null != m_initVec)
{
des.IV = m_initVec;
}
else
{
m_initVec = des.IV;
}
return des.CreateEncryptor();
} case EncryptionAlgorithm.Rc2:
{
RC2 rc = new RC2CryptoServiceProvider();
rc.Mode = CipherMode.CBC;
if (null != m_Key)
{
rc.Key = m_Key;
}
else
{
m_Key = rc.Key;
}
if (null != m_initVec)
{
rc.IV = m_initVec;
}
else
{
m_initVec = rc.IV;
}
return rc.CreateEncryptor();
}
case EncryptionAlgorithm.Rijndael:
{
Rijndael rijndael = new RijndaelManaged();
rijndael.Mode = CipherMode.CBC;
if (null != m_Key)
{
rijndael.Key = m_Key;
}
else
{
m_Key = rijndael.Key;
}
if (null != m_initVec)
{
rijndael.IV = m_initVec;
}
else
{
m_initVec = rijndael.IV;
}
return rijndael.CreateEncryptor();
}
case EncryptionAlgorithm.TripleDes:
{
TripleDES edes = new TripleDESCryptoServiceProvider();
edes.Mode = CipherMode.CBC;
if (null != m_Key)
{
edes.Key = m_Key;
}
else
{
m_Key = edes.Key;
}
if (null != m_initVec)
{
edes.IV = m_initVec;
}
else
{
m_initVec = edes.IV;
}
return edes.CreateEncryptor();
}
default:
throw new CryptographicException("Algorithm ID '" + algorithm + "' not supported.");
} } /// <summary>
/// 提供具体实现解密的方法
/// </summary>
/// <param name="algorithm"></param>
/// <param name="bytesData">需要解密的信息</param>
/// <returns></returns>
public byte[] Decrypt(EncryptionAlgorithm algorithm, byte[] bytesData)
{
byte[] result = new byte[];
using (MemoryStream stream = new MemoryStream())
{
ICryptoTransform cryptoServiceProvider = GetDecryptoServiceProvider(algorithm);
using (CryptoStream stream2 = new CryptoStream(stream, cryptoServiceProvider, CryptoStreamMode.Write))
{
try
{
stream2.Write(bytesData, , bytesData.Length);
stream2.FlushFinalBlock();
stream2.Close();
result = stream.ToArray();
}
catch (Exception exception)
{
throw new Exception("Error while writing decrypted data to the stream: \n" + exception.Message);
}
}
stream.Close();
}
return result;
}
/// <summary>
/// 提供具体实现加密的方法
/// </summary>
/// <param name="algorithm"></param>
/// <param name="bytesData">需要加密的信息</param>
/// <returns></returns>
public byte[] Encrypt(EncryptionAlgorithm algorithm, byte[] bytesData)
{
byte[] result = new byte[];
using (MemoryStream stream = new MemoryStream())
{
ICryptoTransform cryptoServiceProvider = this.GetEncryptoServiceProvider(algorithm);
using (CryptoStream stream2 = new CryptoStream(stream, cryptoServiceProvider, CryptoStreamMode.Write))
{
try
{
stream2.Write(bytesData, , bytesData.Length);
stream2.FlushFinalBlock();
stream2.Close();
result = stream.ToArray();
}
catch (Exception exception)
{
throw new Exception("Error while writing encrypted data to the stream: \n" + exception.Message);
}
}
stream.Close();
}
return result;
} }
EncryptTransform的更多相关文章
- EncryptionHelper
public static class EncryptionHelper { #region const /// <summary> /// 默认使用的适合于DES,RC2算法的Key / ...
- [C#]AES加密算法实现
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分 ...
- C#简单的加密类
1.加密 public class EncryptHepler { // 验值 static string saltValue = "XXXX"; // 密码值 static st ...
- Silverlight信息加密 - 通过Rfc2898DeriveBytes类使用基于HMACSHA1的伪随机数生成器实现PBKDF2
原文: http://blog.csdn.net/xuyue1987/article/details/6706600 在上一篇文章当中,介绍到了通过Silverlight获取web.config中的值 ...
随机推荐
- 浏览器 CSS Hack 收集
所谓的Hack就是只有特定浏览器才能识别这段hack代码.Hack 不是什么好东西,除非没有办法,我们尽量还是不要用着玩意. 下面是各个浏览器的CSS Hack 列表. Firefox 浏览器 @-m ...
- Linux 的启动流程(转)
原文链接:http://blog.jobbole.com/46078/ 半年前,我写了<计算机是如何启动的?>,探讨BIOS和主引导记录的作用. 那篇文章不涉及操作系统,只与主板的板载程序 ...
- WPF调用图片路径,或资源图片
一.加载本项目的图片WPF引入了统一资源标识Uri(Unified Resource Identifier)来标识和访问资源.其中较为常见的情况是用Uri加载图像.Uri表达式的一般形式为:协议+授权 ...
- Github上的andoird开源组件整理
http://blog.csdn.net/findsafety/article/details/50623627 第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListVie ...
- spring中配置了事务,数据业务层捕获异常,事务配置不成功?
原理:spring aop 异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常,才能进行回滚,默认情况下aop只捕获runtimeexception的异常 ...
- cordova混合开发:Android中native调用javascript
今天学习怎么在java中调用javascript方法,做个记录: 第一种方式,这个最简单: loadUrl("javascript:func1()"); 要注意要在devicere ...
- java ConcurrentModificationException探究
当集合结构被修改,会抛出Concurrent Modification Exception. fail-fast会在以下两种情况下抛出ConcurrentModificationException ( ...
- Emit动态生成代码
Emit动态生成代码 引用:秒懂C#通过Emit动态生成代码 首先需要声明一个程序集名称, // specify a new assembly name var assemblyName = new ...
- Object-C Categories和Protocols
Category 要扩展一个不可修改的类,通常的做法是为该类创建一个子类,在子类中实现想要实现的方法,在Object-C中,可以通过category来实现,并且实现方式更为简单. 现在有如下定义:一个 ...
- POJ 2082 Terrible Sets
Terrible Sets Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 2747 Accepted: 1389 Des ...