本帖最后由 ♂张耕明 于 2012-10-27 20:56 编辑
DES:数据加密标准(DES,Data Encryption Standard)是一种使用密钥加密的块密码,它基于使用56位密钥的对称算法。DES现在已经不被视为一种安全的加密算法,主要因为它使用的56位密钥过短。为了提供实用所需的安全性,可以使用DES的派生算法3DES来进行加密,在2001年,DES作为一个标准已经被高级加密标准(AES)所取代。
/// <summary>
/// 使用DES加密字符串
/// </summary>
/// <param name="source">要加密的字符串</param>
/// <param name="key">加密密匙</param>
/// <returns>加密后的字符串</returns>
private static string EncryptByDES(string source, string key)
{
byte[] input = Encoding.Default.GetBytes(key);
byte[] temp = new byte[16] { 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200 };
if (input.Length > 16)
{
Console.WriteLine("只能输入8个汉字或者16个字符!");
return null;
}
input.CopyTo(temp, 0);
DESCryptoServiceProvider cryptoService = new DESCryptoServiceProvider();//实例化DES加密服务类
cryptoService.Mode = CipherMode.CBC;//使用的加密模式
cryptoService.IV = temp.Take(8).ToArray();//定义偏移量
cryptoService.Key = temp.Skip(8).ToArray();//定义密钥
ICryptoTransform encryptor = cryptoService.CreateEncryptor();//使用加密服务对象创建一个对流执行加密转换的加密器
byte[] byteArr = Encoding.Default.GetBytes(source);//把源字符串放到字节数组中
return Convert.ToBase64String(encryptor.TransformFinalBlock(byteArr, 0, byteArr.Length));//使用加密器加密数据
}
/// <summary>
/// 使用DES解密字符串
/// </summary>
/// <param name="source">要解密的字符串</param>
/// <param name="key">解密密匙</param>
/// <returns>解密后的字符串</returns>
private static string DecryptByDES(string source, string key)
{
byte[] input = Encoding.Default.GetBytes(key);
byte[] temp = new byte[16] { 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200 };
if (input.Length > 16)
{
Console.WriteLine("错误的密匙");
return null;
}
input.CopyTo(temp, 0);
DESCryptoServiceProvider cryptoService = new DESCryptoServiceProvider();
cryptoService.Mode = CipherMode.CBC;
cryptoService.IV = temp.Take(8).ToArray();
cryptoService.Key = temp.Skip(8).ToArray();
byte[] byteArr = Convert.FromBase64String(source);//把源字符串放到字节数组中
ICryptoTransform decryptor = cryptoService.CreateDecryptor();//使用加密服务对象创建一个对流执行解密转换的解密器
return Encoding.Default.GetString(decryptor.TransformFinalBlock(byteArr, 0, byteArr.Length));//使用解密器解密数据,密匙错误会抛异常
}
3DES:(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。
/// <summary>
/// 使用DES加密字符串
/// </summary>
/// <param name="source">要加密的字符串</param>
/// <param name="key">加密密匙</param>
/// <returns>加密后的字符串</returns>
public static string EncryptBy3DES(string source, string key)
{
Regex reg = new Regex(@"[\w\W]{0,8}");
MatchCollection matchs = reg.Matches(key);
string result = source;
foreach (Match match in matchs)
{
result = EncryptByDES(result, match.ToString());
}
return result;
}
/// <summary>
/// 使用DES解密字符串
/// </summary>
/// <param name="source">要解密的字符串</param>
/// <param name="key">解密密匙</param>
/// <returns>解密后的字符串</returns>
public static string DecryptBy3DES(string source, string key)
{
Regex reg = new Regex(@"[\w\W]{0,8}");
MatchCollection matchs = reg.Matches(key);
string result = source;
for (int i = matchs.Count - 1; i >= 0; i--)
{
result = DecryptByDES(result, matchs.ToString());
}
return result;
} |