折腾了一晚上 C#加密还是用这个比较方便
2009-06-03 22:22
232 查看
using System;
using System.Security.Cryptography;
using System.IO;
using System.Text;
//1、将字符串转换成字节数组
//2、选择加密方式
//3、不可逆加密:MD5、SHA1
//4、可逆加密:DES、RC2、Rijndael
//5、对密钥要求长度不同
//6、加密速度不同、复杂程度不同、安全性不同
public class Class10
{
public Class10()
{
CallMyDES();
}
void CallMyDES()
{
Byte[] key = { 12, 23, 34, 45, 56, 67, 78, 89 };
Byte[] iv = { 120, 230, 10, 1, 10, 20, 30, 40 };
//1、调用MD5、SHA1加密
bool result = MyMD5Crypto("123456");
//2、调用DES加密、解密
string a = MyDESCrypto("123456", key, iv);
string b = MyDESCryptoDe(a, key, iv);
//3、调用DES对文件加密、解密
MyDESCryptoFile("123456", key, iv);
string str = MyDESCryptoFileDe(key, iv);
//4、调用TripleDES加密、解密
string a1 = TripleDESCrypto("中国", "8i9o0p-[=]'/;.l,");//天津香港澳门台湾
string b1 = TripleDESCryptoDe(a1, "8i9o0p-[=]'/;.l,");
//5、调用自定义加密、解密
MyCrypto();
////rsa 比 dea慢,但比dsa安全
//DSA dsa = DSA.Create();
//RSA rea = RSA.Create();
////64
//DES des = DES.Create();
//TripleDES tDes = TripleDES.Create();
//RC2 rc2 = RC2.Create();
////或
//RC2 rc21 = (RC2)SymmetricAlgorithm.Create("RC2");
//Rijndael rjd = Rijndael.Create();
//MD5 md5 = MD5.Create();
//SHA1 sha1 = SHA1.Create();
}
//1、MD5、SHA1加密(可用于加密后的数据以后不再显示,如加密用户密码)
bool MyMD5Crypto(string userPassword)//"123456";
{
bool result = false;
//单向加密
//1、MD5
string dbPassword = "E10ADC3949BA59ABBE56E057F20F883E";
string md5Password = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(userPassword, "MD5");
if (md5Password == dbPassword)
{
result = true;
}
//2、SHA1
string sha1Password = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(userPassword, "SHA1");
//"7C4A8D09CA3762AF61E59520943DC26494F8941B"
return result;
}
//2、DES对字符串加密、解密
string MyDESCrypto(string str, byte[] keys, byte[] ivs)
{
//加密
byte[] strs = Encoding.Unicode.GetBytes(str);
DESCryptoServiceProvider desc = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
ICryptoTransform transform = desc.CreateEncryptor(keys, ivs);//加密对象
CryptoStream cStream = new CryptoStream(mStream, transform, CryptoStreamMode.Write);
cStream.Write(strs, 0, strs.Length);
cStream.FlushFinalBlock();
return Convert.ToBase64String(mStream.ToArray());
}
string MyDESCryptoDe(string str, byte[] keys, byte[] ivs)
{
//解密
byte[] strs = Convert.FromBase64String(str);
DESCryptoServiceProvider desc = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
ICryptoTransform transform = desc.CreateDecryptor(keys, ivs);//解密对象
CryptoStream cStream = new CryptoStream(mStream, transform, CryptoStreamMode.Write);
cStream.Write(strs, 0, strs.Length);
cStream.FlushFinalBlock();
return Encoding.Unicode.GetString(mStream.ToArray());
}
//3、DSA对文件加密、解密
void MyDESCryptoFile(string str, Byte[] key, Byte[] iv)
{
Byte[] inputStr = Encoding.Unicode.GetBytes(str);
//
DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
ICryptoTransform transform = provider.CreateEncryptor(key, iv);//加密对象
FileStream fStream = new FileStream(@"D:/a.txt", FileMode.Create, FileAccess.Write);
CryptoStream cStream = new CryptoStream(fStream, transform, CryptoStreamMode.Write);
cStream.Write(inputStr, 0, inputStr.Length);
cStream.Close();
}
string MyDESCryptoFileDe(Byte[] key, Byte[] iv)
{
DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
ICryptoTransform transform = provider.CreateDecryptor(key, iv);//解密对象
FileStream fStream = new FileStream(@"D:/a.txt", FileMode.Open, FileAccess.Read);
CryptoStream cStream = new CryptoStream(fStream, transform, CryptoStreamMode.Read);
StreamReader reader = new StreamReader(cStream, new UnicodeEncoding());
string str = reader.ReadToEnd();
cStream.Close();
return str;
}
//4、TripleDES加密、解密
string TripleDESCrypto(string str, string key)
{
byte[] data = UnicodeEncoding.Unicode.GetBytes(str);//如果加密中文,不能用ASCII码
byte[] keys = ASCIIEncoding.ASCII.GetBytes(key);
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Key = keys;//key的长度必须为16位或24位,否则报错“指定键的大小对于此算法无效。”,des.Key不支持中文
des.Mode = CipherMode.ECB;//设置运算模式
ICryptoTransform cryp = des.CreateEncryptor();//加密
return Convert.ToBase64String(cryp.TransformFinalBlock(data, 0, data.Length));
}
string TripleDESCryptoDe(string str, string key)
{
byte[] data = Convert.FromBase64String(str);
byte[] keys = ASCIIEncoding.ASCII.GetBytes(key);
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Key = keys;
des.Mode = CipherMode.ECB;//设置运算模式
des.Padding = PaddingMode.PKCS7;
ICryptoTransform cryp = des.CreateDecryptor();//解密
return UnicodeEncoding.Unicode.GetString(cryp.TransformFinalBlock(data, 0, data.Length));
}
//5、自定义加密、解密
void MyCrypto()
{
string a = "123456中国";
string b = "";
//加密
for (int i = 0; i < a.Length; i++)
{
b += (char)(a[i] + 10 - 2 * 3);
}
//解密
string c = "";
for (int i = 0; i < a.Length; i++)
{
c += (char)(b[i] - 10 + 2 * 3);
}
}
}
using System.Security.Cryptography;
using System.IO;
using System.Text;
//1、将字符串转换成字节数组
//2、选择加密方式
//3、不可逆加密:MD5、SHA1
//4、可逆加密:DES、RC2、Rijndael
//5、对密钥要求长度不同
//6、加密速度不同、复杂程度不同、安全性不同
public class Class10
{
public Class10()
{
CallMyDES();
}
void CallMyDES()
{
Byte[] key = { 12, 23, 34, 45, 56, 67, 78, 89 };
Byte[] iv = { 120, 230, 10, 1, 10, 20, 30, 40 };
//1、调用MD5、SHA1加密
bool result = MyMD5Crypto("123456");
//2、调用DES加密、解密
string a = MyDESCrypto("123456", key, iv);
string b = MyDESCryptoDe(a, key, iv);
//3、调用DES对文件加密、解密
MyDESCryptoFile("123456", key, iv);
string str = MyDESCryptoFileDe(key, iv);
//4、调用TripleDES加密、解密
string a1 = TripleDESCrypto("中国", "8i9o0p-[=]'/;.l,");//天津香港澳门台湾
string b1 = TripleDESCryptoDe(a1, "8i9o0p-[=]'/;.l,");
//5、调用自定义加密、解密
MyCrypto();
////rsa 比 dea慢,但比dsa安全
//DSA dsa = DSA.Create();
//RSA rea = RSA.Create();
////64
//DES des = DES.Create();
//TripleDES tDes = TripleDES.Create();
//RC2 rc2 = RC2.Create();
////或
//RC2 rc21 = (RC2)SymmetricAlgorithm.Create("RC2");
//Rijndael rjd = Rijndael.Create();
//MD5 md5 = MD5.Create();
//SHA1 sha1 = SHA1.Create();
}
//1、MD5、SHA1加密(可用于加密后的数据以后不再显示,如加密用户密码)
bool MyMD5Crypto(string userPassword)//"123456";
{
bool result = false;
//单向加密
//1、MD5
string dbPassword = "E10ADC3949BA59ABBE56E057F20F883E";
string md5Password = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(userPassword, "MD5");
if (md5Password == dbPassword)
{
result = true;
}
//2、SHA1
string sha1Password = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(userPassword, "SHA1");
//"7C4A8D09CA3762AF61E59520943DC26494F8941B"
return result;
}
//2、DES对字符串加密、解密
string MyDESCrypto(string str, byte[] keys, byte[] ivs)
{
//加密
byte[] strs = Encoding.Unicode.GetBytes(str);
DESCryptoServiceProvider desc = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
ICryptoTransform transform = desc.CreateEncryptor(keys, ivs);//加密对象
CryptoStream cStream = new CryptoStream(mStream, transform, CryptoStreamMode.Write);
cStream.Write(strs, 0, strs.Length);
cStream.FlushFinalBlock();
return Convert.ToBase64String(mStream.ToArray());
}
string MyDESCryptoDe(string str, byte[] keys, byte[] ivs)
{
//解密
byte[] strs = Convert.FromBase64String(str);
DESCryptoServiceProvider desc = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
ICryptoTransform transform = desc.CreateDecryptor(keys, ivs);//解密对象
CryptoStream cStream = new CryptoStream(mStream, transform, CryptoStreamMode.Write);
cStream.Write(strs, 0, strs.Length);
cStream.FlushFinalBlock();
return Encoding.Unicode.GetString(mStream.ToArray());
}
//3、DSA对文件加密、解密
void MyDESCryptoFile(string str, Byte[] key, Byte[] iv)
{
Byte[] inputStr = Encoding.Unicode.GetBytes(str);
//
DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
ICryptoTransform transform = provider.CreateEncryptor(key, iv);//加密对象
FileStream fStream = new FileStream(@"D:/a.txt", FileMode.Create, FileAccess.Write);
CryptoStream cStream = new CryptoStream(fStream, transform, CryptoStreamMode.Write);
cStream.Write(inputStr, 0, inputStr.Length);
cStream.Close();
}
string MyDESCryptoFileDe(Byte[] key, Byte[] iv)
{
DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
ICryptoTransform transform = provider.CreateDecryptor(key, iv);//解密对象
FileStream fStream = new FileStream(@"D:/a.txt", FileMode.Open, FileAccess.Read);
CryptoStream cStream = new CryptoStream(fStream, transform, CryptoStreamMode.Read);
StreamReader reader = new StreamReader(cStream, new UnicodeEncoding());
string str = reader.ReadToEnd();
cStream.Close();
return str;
}
//4、TripleDES加密、解密
string TripleDESCrypto(string str, string key)
{
byte[] data = UnicodeEncoding.Unicode.GetBytes(str);//如果加密中文,不能用ASCII码
byte[] keys = ASCIIEncoding.ASCII.GetBytes(key);
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Key = keys;//key的长度必须为16位或24位,否则报错“指定键的大小对于此算法无效。”,des.Key不支持中文
des.Mode = CipherMode.ECB;//设置运算模式
ICryptoTransform cryp = des.CreateEncryptor();//加密
return Convert.ToBase64String(cryp.TransformFinalBlock(data, 0, data.Length));
}
string TripleDESCryptoDe(string str, string key)
{
byte[] data = Convert.FromBase64String(str);
byte[] keys = ASCIIEncoding.ASCII.GetBytes(key);
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Key = keys;
des.Mode = CipherMode.ECB;//设置运算模式
des.Padding = PaddingMode.PKCS7;
ICryptoTransform cryp = des.CreateDecryptor();//解密
return UnicodeEncoding.Unicode.GetString(cryp.TransformFinalBlock(data, 0, data.Length));
}
//5、自定义加密、解密
void MyCrypto()
{
string a = "123456中国";
string b = "";
//加密
for (int i = 0; i < a.Length; i++)
{
b += (char)(a[i] + 10 - 2 * 3);
}
//解密
string c = "";
for (int i = 0; i < a.Length; i++)
{
c += (char)(b[i] - 10 + 2 * 3);
}
}
}
相关文章推荐
- 系统的时间调不错,就是界面躁动太多,要是允许话还是在自己的界面中加入比较薄, 不过这个很方便。
- 今天在ITPUB上回复了一个帖子,这个帖子还是比较广度的,希望大家帮忙补充,谢谢!
- 这个批量发邮件服务还是比较给力的,不过太烦了,
- Xilinx Altera FPGA中的逻辑资源(Slices VS LE)比较 前言 经常有朋友会问我,“我这个方案是用A家的FPGA还是X家的FPGA呢?他们的容量够不够呢?他们的容量怎么比较
- DES算法的加密解密类,由于MD5很难解密,自己不方便,所以用这个了
- favicon还是这个网站生成的比较正确
- 被这个C程序折腾死了
- jxl.jar 的百度百科,根据这个还是可以搞出来的,不过就是修改那块写的不是很好,修改其实可以直接读取数据并操作。
- 链表倒置,这个还是考验仔细程度,第一遍还没做对 —— 剑指Offer
- 自动化还是不自动化,就是这个问题
- 这个就是比较
- 【原创】比较两款c#的本地代码加密软件
- SQL server 与Oracle开发比较(同事帮忙整理的,放这里方便查询)
- 毕业一年(这个总结来的比较晚)
- 搞计算机,还是需要高配且专业的笔记本(这个名字好像是有点像广告贴了哈)
- 这个题用堆排序还是直接插入法呢?
- 这个网站比较奇怪(没有主页快照却显示主页域名)
- 怎么恢复移动硬盘中毒了数据呢丨用什么方法恢复比较方便准确呢丨
- 1:初学hadoop遇到各种错误,这里贴一下,方便以后脑补吧,报错如下: 主要是在window环境下面搞hadoop,而hadoop部署在linux操作系统上面;出现这个错误是权限的问题,操作had
- 几款软件加密/加壳工具的比较