DES的两个简单的加密、解密函数(C#中使用)
来源:互联网 发布:大淘客cms偷单吗 编辑:程序博客网 时间:2024/04/29 10:34
本周我做的网站屡出问题,最后找出问题,但中途考虑的安全问题也随之进入我的禁戒线内
故花了今天半天学习C#中的加密算法
在中途中找到2种,一种是不可逆的MD5算法,另一种是DES对称加密算法
MD5加密适合做登录等重要、敏感信息中使用,数据库插入的为加密后的MD5值,即使被黑客攻入数据库,看见的也只是一些MD5值,MD5又是不可逆的。但是也有很大的缺点,管理员无法看到用户的信息。所以非非常重要的不建议使用。
第二种为DES算法。虽然黑客能够得到DES值后逆算回原文本,但是即使按现在计算机的速度也需要使用较多的时间。一般一个黑客不会花那么多时间去整理,而且运算速度也较快。
其实还有更多更安全的加密方法 可以参考http://baike.baidu.com/view/155969.htm?fr=ala0_1_1
但是对大多数企业网站或是个人网站,我觉得MD5,DES,3DES就足够了
下面来看看源代码:
sing System;
using System.Security.Cryptography;
using System.Text;
using System.Web.Security;
namespace PublicHelper
{
/// <summary>
/// 数据加密解密
/// </summary>
public class DEncryptHelper
{
/// <summary>
/// 生成MD5摘要
/// </summary>
/// <param name="original"></param>
/// <returns></returns>
public static byte[] MakeMD5(byte[] original)
{
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
byte[] keyhash = hashmd5.ComputeHash(original);
hashmd5 = null;
byte[] bytes = Encoding.UTF8.GetBytes("ss");
return keyhash;
}
/// <summary>
/// 数据加密
/// </summary>
/// <param name="original">数据源</param>
/// <param name="key">密钥</param>
/// <returns>密文</returns>
public static byte[] Encrypt(byte[] original, byte[] key)
{
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Key = MakeMD5(key);
des.Mode = CipherMode.ECB;
return des.CreateEncryptor().TransformFinalBlock(original, 0, original.Length);
}
/// <summary>
/// 数据加密
/// </summary>
/// <param name="original">数据源</param>
/// <param name="key">密钥</param>
/// <returns>密文</returns>
public static string Encrypt(string original, string key)
{
byte[] buff = System.Text.Encoding.Default.GetBytes(original);
byte[] kb = System.Text.Encoding.Default.GetBytes(key);
return Convert.ToBase64String(Encrypt(buff, kb));
}
/// <summary>
/// 使用给定密钥解密数据
/// </summary>
/// <param name="encrypted">密文</param>
/// <param name="key">密钥</param>
/// <returns>明文</returns>
public static byte[] Decrypt(byte[] encrypted, byte[] key)
{
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Key = MakeMD5(key);
des.Mode = CipherMode.ECB;
return des.CreateDecryptor().TransformFinalBlock(encrypted, 0, encrypted.Length);
}
/// <summary>
/// 使用给定密钥字符串解密string,返回指定编码方式明文
/// </summary>
/// <param name="encrypted">密文</param>
/// <param name="key">密钥</param>
/// <param name="encoding">字符编码方案</param>
/// <returns>明文</returns>
public static string Decrypt(string encrypted, string key, Encoding encoding)
{
byte[] buff = Convert.FromBase64String(encrypted);
byte[] kb = System.Text.Encoding.Default.GetBytes(key);
return encoding.GetString(Decrypt(buff, kb));
}
/// <summary>
/// 使用给定密钥字符串解密string
/// </summary>
/// <param name="encrypted">密文</param>
/// <param name="key">密钥</param>
/// <returns>明文</returns>
public static string Decrypt(string encrypted, string key)
{
return Decrypt(encrypted, key, Encoding.Default);
}
/// <summary>
/// 数据加密
/// </summary>
/// <param name="original">数据源</param>
/// <param name="encryptFormat">0:SHA1,1:MD5</param>
/// <returns></returns>
public static string Encrypt(string original, int encryptFormat)
{
string ciphertext = "";
switch (encryptFormat)
{
case 0:
ciphertext = FormsAuthentication.HashPasswordForStoringInConfigFile(original, "SHA1");
break;
case 1:
ciphertext = FormsAuthentication.HashPasswordForStoringInConfigFile(original, "MD5");
break;
}
return ciphertext;
}
/// <summary>
/// 生成MD5码,生成的数据同Encrypt(original,1)
/// </summary>
/// <param name="original"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static string MakeMD5(string original, string encoding)
{
MD5 hashmd5 = new MD5CryptoServiceProvider();
byte[] byteOriginal = hashmd5.ComputeHash(Encoding.GetEncoding(encoding).GetBytes(original));
StringBuilder ciphertext = new StringBuilder(32);
for (int i = 0; i < byteOriginal.Length; i++)
{
ciphertext.Append(byteOriginal[i].ToString("x").PadLeft(2, '0'));
}
return ciphertext.ToString();
}
}
}
1:public static string MakeMD5(string original, string encoding) 使用MD5算法将original使用encoding编码方式加密
2:public static string Encrypt(string original, string key) 使用可逆的算法(难道是des)将original加密,密匙为key
3:public static string Decrypt(string encrypted, string key) 使用可逆的算法(难道是des)将original还原,密匙为key
4:public static string Encrypt(string original, int encryptFormat) 使用sha1或则MD5算法加密original,int为case条件
这个类中用到的就这4个方法,其实第四个已经包含第一个。
此类提供者:Mr Zheng, a person who taught me
- DES的两个简单的加密、解密函数(C#中使用)
- c#中DES加密解密的类
- 使用C# DES解密java DES加密的字符串
- 使用C# DES解密java DES加密的字符串
- C#的des加密解密
- C# 的 DES 加密解密
- C#使用MD5加密,DES加密解密的一个类
- 【转】c#中DES加密解密的类
- Java和C#中3DES的加密与解密
- C#的DES加密解密算法【vs2005】
- C#的DES加密解密算法
- C#的DES加密解密算法【vs2005】
- C#的3DES加密/解密
- C#的DES加密解密算法
- Java实现简单的DES加密解密
- C#中DES加密解密
- C#中DES加密解密
- C#中DES加密解密
- 修改和查看oracle数据库的编码
- 被wpf折腾死了
- Fabridge-沟通javascript与flex的桥梁
- .net自动发送邮件,适用于MD5或sha1加密后的密码取
- Test
- DES的两个简单的加密、解密函数(C#中使用)
- 发觉自己老了,附精妙权限算法一则
- sql server 2000 扩展盘区分配错误 error:8905 的问题解决
- 使用JS让一般人不能复制你的劳动成果
- 永久去除桌面快捷方式小箭头的简单方法
- 正则表达式使用详解
- 在JS中常用的郑则表达式
- asp.net中,异地调用JS文件,产生乱码的解决
- http://acm.hdu.edu.cn/showproblem.php?pid=1299 (求因子个数)