using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;
using System.Web.Security;
//工程需要引用system.web.dll
/**//*
* 通用的安全密码类
*
* 本类库支持DES,RC2,Rijndael, TripleDes,RSA, MD5, SHA1等六种加密格式
*
* 注意:MD5, SHA1加密是不可逆的,所以不支持他们的解密;
*
* 支持生成Key/公钥,Iv/私钥及简单的随机字符;
*
* SmartJavaer
*
* SmartJavaer@163.com
*
* 2006/10/26
*
*/
namespace ManagePassword
{
//枚举加密格式
#region 枚举加密格式
/**//// <summary>
/// 枚举加密的格式
///
/// 对称加密:DES,RC2,RIJNDAEL,TripleDes
/// 非对称加密:DSA,RSA
/// 哈西加密:MD5,SHA1
///
/// </summary>
public enum CryptogramFormat { Des = 1, Rc2, Rijndael, TripleDes,RSA,MD5, SHA1 }
#endregion
//通用密码类
#region 通用密码类
/**//// <summary>
/// 一个通用的加密类
/// 支持DES,RC2,Rijndael, TripleDes,RSA, MD5, SHA1等六种加密格式
/// 注意:MD5, SHA1加密是不可逆的,所以不支持他们的解密;
/// 支持生成Key/公钥,Iv/私钥及简单的随机字符;
/// </summary>
public class Cryptogram
{
private Cryptogram() { }
//加密,解密内部处理
#region 加密,解密内部处理
/**//// <summary>
/// 生成Des,Rc2,Rijndael,TripleDes的处理对象
/// </summary>
/// <param name="encryptionFormat">加密格式</param>
/// <param name="key">Key</param>
/// <param name="iv">IV</param>
/// <returns>返回处理对象,若返回null,则表示生成失败;</returns>
private static SymmetricAlgorithm GetCSP(CryptogramFormat encryptionFormat,string key,string iv)
{
SymmetricAlgorithm mCSP;
switch (encryptionFormat)
{
case CryptogramFormat.Des:
{
mCSP = new DESCryptoServiceProvider();
break;
}
case CryptogramFormat.TripleDes:
{
mCSP = new TripleDESCryptoServiceProvider();
break;
}
case CryptogramFormat.Rc2:
{
mCSP = new RC2CryptoServiceProvider();
break;
}
case CryptogramFormat.Rijndael:
{
mCSP = new RijndaelManaged();
break;
}
default:
mCSP = null;
break;
}
if (mCSP == null)
return null;
if(key.Length==0)
// if(String.IsNullOrEmpty(key))
{
//mCSP.GenerateKey();
return null;
}
else
{
try
{
mCSP.Key = Convert.FromBase64String(key);
}
catch
{
//mCSP.GenerateKey();
return null;
}
}
if (iv.Length==0)
//if (String.IsNullOrEmpty(iv))
{
//mCSP.GenerateIV();
return null;
}
else
{
try
{
mCSP.IV = Convert.FromBase64String(iv);
}
catch
{
//mCSP.GenerateIV();
return null;
}
}
return mCSP;
}
/**//// <summary>
/// Des,Rc2,Rijndael,TripleDes加密
/// </summary>
/// <param name="encryptionFormat">加密格式</param>
/// <param name="srcString">欲加密的字符串</param>
/// <param name="key">Key</param>
/// <param name="iv">IV</param>
/// <returns>返回加密后的字符串,若返回null,则表示加密失败;</returns>
private static string CSPEncode(CryptogramFormat encryptionFormat, string srcString, string key, string iv)
{
SymmetricAlgorithm mCSP;
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
byte[] byt;
mCSP = GetCSP(encryptionFormat, key, iv);
if (mCSP == null)
return null;
try
{
ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);
byt = Convert.FromBase64String(srcString);
ms = new MemoryStream();
cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return Convert.ToBase64String(ms.ToArray());
}
catch
{
return null;
}
}
/**//// <summary>
/// Des,Rc2,Rijndael,TripleDes解密
/// </summary>
/// <param name="encryptionFormat"></param>
/// <param name="srcString"></param>
/// <param name="key"></param>
/// <param name="iv"></param>
/// <returns></returns>
private static string CSPDecode(CryptogramFormat encryptionFormat, string srcString, string key, string iv)
{
SymmetricAlgorithm mCSP;
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
byte[] byt;
mCSP = GetCSP(encryptionFormat, key, iv);
if (mCSP == null)
return null;
try
{
ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);
byt = Convert.FromBase64String(srcString);
ms = new MemoryStream();
cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return Convert.ToBase64String(ms.ToArray());
}
catch
{
return null;
}
}
/**//// <summary>
/// RSA加密
/// </summary>
/// <param name="encryptionFormat"></param>
/// <param name="srcString"></param>
/// <param name="key"></param>
/// <param name="iv"></param>
/// <returns></returns>
private static string RSAEncode(CryptogramFormat encryptionFormat, string srcString, string key, string iv)
{
RSACryptoServiceProvider rsa1 = new RSACryptoServiceProvider();
byte[] toEncryptData = null;
byte[] encryptedData = null;
try
{
rsa1.FromXmlString(key);
}
catch
{
return null;
}
try
{
rsa1.FromXmlString(iv);
}
catch
{
return null;
}
toEncryptData = Convert.FromBase64String(srcString);
encryptedData = rsa1.Encrypt(toEncryptData, false);//加密后的数据
return Convert.ToBase64String(encryptedData);
}
/**//// <summary>
/// RSA解密
/// </summary>
/// <param name="encryptionFormat"></param>
/// <param name="srcString"></param>
/// <param name="key"></param>
/// <param name="iv"></param>
/// <returns></returns>
private static string RSADecode(CryptogramFormat encryptionFormat, string srcString, string key, string iv)
{
RSACryptoServiceProvider rsaD = new RSACryptoServiceProvider();
byte[] encryptedData = null ;
byte[] decryptedData = null ;
try
{
rsaD.FromXmlString(key);
}
catch
{
return null;
}
try
{
rsaD.FromXmlString(iv);
}
catch
{
return null;
}
encryptedData = Convert.FromBase64String(srcString);
decryptedData = rsaD.Decrypt(encryptedData, false);//解密后的数据
return Convert.ToBase64String(decryptedData);
}
/**//// <summary>
/// 生成对称加密格式的Key和IV
/// </summary>
/// <param name="encryptionFormat">加密格式</param>
/// <param name="key"></param>
/// <param name="iv"></param>
private static void KeyAndIV(CryptogramFormat encryptionFormat, ref string key, ref string iv)
{
SymmetricAlgorithm mCSP;
switch (encryptionFormat)
{
case CryptogramFormat.Des:
{
mCSP = new DESCryptoServiceProvider();
break;
}
case CryptogramFormat.TripleDes:
{
mCSP = new TripleDESCryptoServiceProvider();
break;
}
case CryptogramFormat.Rc2:
{
mCSP = new RC2CryptoServiceProvider();
break;
}
case CryptogramFormat.Rijndael:
{
mCSP = new RijndaelManaged();
break;
}
default:
mCSP = null;
break;
}
mCSP.GenerateKey();
mCSP.GenerateIV();
key = Convert.ToBase64String(mCSP.Key);
iv = Convert.ToBase64String(mCSP.IV);
}
#endregion
//公共加密解密方法
#region 公共加密解密方法
/**//// <summary>
/// 加密方法
/// </summary>
/// <param name="encryptionFormat">加密格式</param>
/// <param name="srcString">欲加密字符串</param>
/// <returns>返回加密后的字符串;若返回null,表示失败</returns>
public static string Encrypt(CryptogramFormat encryptionFormat, string srcString)
{
try
{
switch (encryptionFormat)
{
case CryptogramFormat.MD5:
return FormsAuthentication.HashPasswordForStoringInConfigFile(srcString, "MD5");
case CryptogramFormat.SHA1:
return FormsAuthentication.HashPasswordForStoringInConfigFile(srcString, "SHA1");
case CryptogramFormat.Des:
case CryptogramFormat.Rc2:
case CryptogramFormat.Rijndael:
case CryptogramFormat.TripleDes:
case CryptogramFormat.RSA:
return "缺少参数";
default:
{
return "不支持该格式的加密";
}
}
}
catch (Exception e)
{
return "加密异常:" + e.Message;
}
}
/**//// <summary>
/// 加密方法
/// </summary>
/// <param name="encryptionFormat">加密格式</param>
/// <param name="srcString">欲加密字符串</param>
/// <param name="key">指定加密的Key</param>
/// <param name="iv">指定加密的IV</param>
/// <returns>返回加密后的字符串;若返回null,表示失败</returns>
public static string Encrypt(CryptogramFormat encryptionFormat, string srcString,string key,string iv)
{
try
{
switch (encryptionFormat)
{
case CryptogramFormat.MD5:
return FormsAuthentication.HashPasswordForStoringInConfigFile(srcString, "MD5");
case CryptogramFormat.SHA1:
return FormsAuthentication.HashPasswordForStoringInConfigFile(srcString, "SHA1");
case CryptogramFormat.Des:
case CryptogramFormat.Rc2:
case CryptogramFormat.Rijndael:
case CryptogramFormat.TripleDes:
return CSPEncode(encryptionFormat, srcString, key, iv);
//case CryptogramFormat.DSA:
// return DSAEncode(encryptionFormat, srcString, key, iv);
case CryptogramFormat.RSA:
return RSAEncode(encryptionFormat, srcString, key, iv);
default:
{
return null;
}
}
}
catch (Exception e)
{
return "加密异常:" + e.Message;
}
}
/**//// <summary>
/// 解密方法
/// </summary>
/// <param name="encryptionFormat">加密格式</param>
/// <param name="srcString">欲解密字符串</param>
/// <param name="key">指定解密的Key</param>
/// <param name="iv">指定解密的IV</param>
/// <returns>返回解密后的字符串;若返回null,表示失败</returns>
public static string Decrypt(CryptogramFormat encryptionFormat, string srcString, string key, string iv)
{
try
{
switch (encryptionFormat)
{
case CryptogramFormat.Des:
case CryptogramFormat.Rc2:
case CryptogramFormat.Rijndael:
case CryptogramFormat.TripleDes:
return CSPDecode(encryptionFormat, srcString, key, iv);
case CryptogramFormat.RSA:
return RSADecode(encryptionFormat, srcString, key, iv);
default:
{
return "不支持该种解密";
}
}
}
catch(Exception e)
{
return "解密异常:"+e.Message;
}
}
/**//// <summary>
/// 生成Key和IV
/// </summary>
/// <param name="encryptionFormat">加密格式</param>
/// <param name="key">Key</param>
/// <param name="iv">Iv</param>
/// <returns>返回是否成功生成Key和IV</returns>
public static bool GenerateKeyAndIV(CryptogramFormat encryptionFormat, ref string key, ref string iv)
{
try
{
switch (encryptionFormat)
{
case CryptogramFormat.MD5:
case CryptogramFormat.SHA1:
key = "不支持";
iv = "不支持";
break;
case CryptogramFormat.Des:
case CryptogramFormat.Rc2:
case CryptogramFormat.Rijndael:
case CryptogramFormat.TripleDes:
KeyAndIV(encryptionFormat,ref key,ref iv);
break;
case CryptogramFormat.RSA:
RSACryptoServiceProvider rsaD = new RSACryptoServiceProvider();
key = rsaD.ToXmlString(false);
iv = rsaD.ToXmlString(true);
break;
default:
{
return false;
}
}
}
catch
{
return false;
}
return true;
}
#endregion
//生成随机密码
#region 生成随机密码
/**//// <summary>
/// 生成随机密码
/// </summary>
/// <returns></returns>
public static string GenerateString()
{
return GenerateString(8);
}
/**//// <summary>
/// 生成随机密码
/// </summary>
/// <param name="keylength"></param>
/// <returns></returns>
public static string GenerateString(int keylength)
{
try
{
if (keylength <= 1)
return "SmartJavaer";
byte[] buff = new Byte[keylength/2];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(buff);
//return Convert.ToBase64String(buff);
StringBuilder sb = new StringBuilder(keylength);
int i;
for (i = 0; i < buff.Length; i++)
{
sb.Append(String.Format("{0:X2}", buff[i]));
}
return sb.ToString();
}
catch
{
return "SmartJavaer";
}
}
#endregion
}
#endregion
}
分享到:
相关推荐
C#常用加密类包含DES、MD5、RC2、Rijndael、RSA、TripleDES
本程序是本人综合一些加密解密算法,写成的加密解密算法类 其中包括对字符串加密解密、文件加密解密 加密方法有:DES,RC2,Rijndael,TripleDES,C#与java默认的DES加密算 法接口,MD5加密算法 vs2008 C# 源码
本程序是本人综合一些加密解密算法,写成的加密解密算法类 其中包括对字符串加密解密、文件加密解密 加密方法有:DES,RC2,Rijndael,TripleDES,C#与java默认的DES加密算 法接口,MD5加密算法 vs2008 C# 源码
本资源包含了一些常见的C#加密解密类,如MD5、RSA、DES和RC2。下面将详细阐述这些算法的工作原理及其在C#中的应用。 1. **MD5(Message-Digest Algorithm 5)** MD5是一种广泛使用的哈希函数,它将任意长度的输入...
AES DES RC2 RC4 3DES加密解密工具,支持多种加密解密算法,打CTF比赛再也不用去网页搜索了!
各种散列:MD2/MD4/MD5,SHA/SHA1/SHA256/SHA384/SHA512。HMAC算法,支持 hmac-md5 hmac-sha1 hmac-sha256 hmac-384 hmac-sha512。PEM文件纯易语言解析,载入,导出。FPX文件导入用于winhttp API 双向验证 等等...
例如,一个名为CryptoHelper.php的PHP类文件,通过提供AES、RSA、DES、3DES、ChaCha20、RC2、RC4、RC5和RC6的加密解密功能,可以帮助开发者快速地在项目中实现相应的加密需求,同时保证数据传输和存储的安全。...
这次就不用openssl了直接用windows自带的加密库实现各种加密运算支持的算法:AES、DES、3DES 的(ECB/CBC/OFB/CFB/CTS 模式)RC2 RC4RSA密钥对生成RSA公钥加密/私钥解密RSA签名/验签各种散列:MD2/MD4/MD5,...
通过对AES、RSA、DES、3DES、ChaCha20、RC2、RC4、RC5和RC6等加密算法的学习和应用,不仅可以加深对加密原理的理解,还能够在实际开发中更好地保护数据安全,防止数据泄露和滥用,从而维护个人隐私和企业利益。...
Java类文件中包含的AES、RSA、DES、3DES、ChaCha20、RC2、RC4、RC5、RC6等加密解密函数都是广泛应用于各种安全需求的算法。AES(高级加密标准)是一个对称密钥加密的算法,以高效和安全著称,被美国国家标准技术研究...
本文将深入探讨四种不同的加密算法:DES、凯撒密码、Rijndael(也称为AES)以及RC2,它们各自具有独特的特性和应用场景。 1. **DES(Data Encryption Standard)**: DES是一种古老的对称加密算法,由IBM在1970...
6. TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5:该套件使用RSA算法进行身份验证,使用RC2块加密算法进行加密保护,密钥长度为40位,使用MD5消息摘要算法进行数据完整性验证。 7. TLS_RSA_WITH_IDEA_CBC_SHA:该套件使用...
其中,RC2是可变密钥长度的算法,RC4是一种流密码,RC5以其动态可配置的参数而著名,而RC6是在AES竞赛中竞争的算法之一,采用了新的设计思想和操作模式。 这些组件和源代码可以帮助Delphi 2007开发者在他们的应用...
多年前自己整理的类库合集,仍了可惜了,分享给 C# .net...包含文件类、DES 加密类、MD5加密类、RC2加密类、Rijndael加密类、RSA加密类、三重DES 对称加密类、转换类、Sql数据库处理类、验证类、控件处理类、日期时间类
以下将详细介绍标题中提到的五种加密算法:MD5、DES、RC2、Rijndael(AES)以及RSA,并结合压缩包内的文件,分析它们在C#中的应用。 1. **MD5(Message-Digest Algorithm 5)** MD5是一种广泛使用的哈希函数,可以...
各种散列:MD2/MD4/MD5,SHA/SHA1/SHA256/SHA384/SHA512 HMAC算法,支持 hmac-md5 hmac-sha1 hmac-sha256 hmac-384 hmac-sha512 PEM文件纯 易语言 解析,载入,导出 FPX文件导入用于winhttp API 双向验证 等等...
各种散列:MD2/MD4/MD5,SHA/SHA1/SHA256/SHA384/SHA512 HMAC算法,支持 hmac-md5 hmac-sha1 hmac-sha256 hmac-384 hmac-sha512 PEM文件纯易语言解析,载入,导出 FPX文件导入用于winhttp API 双向验证 等等...