EnClass.cs:
using System;
using System.IO;
using System.Text;
using System.Security;
using System.Security.Cryptography;
namespace hualong
{
/// <summary>
/// EnClass 的摘要说明。
/// </summary>
public class EnClass
{
public EnClass()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
private byte[] but = {0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef};
//byte数据类型是8位无符号整数 ~也就是说~你的加密矢量的数值~大小应该在0-255之间~~只要大小在
//0-255之间~就可以,加密矢量的个数可以任意多个,加密矢量的个数取决于你要加密的字符串的长度.
//我的印象中好象是8个加密矢量最多可以对长度为256的字符串加密.具体我没实验过.如果只是加密用户
//名和密码~~卡号,帐号之类的东西~~8个加密矢量足够用了~~加密矢量和加密密钥的个数和安全相关.
//理论上是越多~越安全.但太多了也不好.还有加密密钥最好是动态生成的,随机的.因为如果是固定的话~~
//一旦你的加密密钥泄露~~~别人就会很轻松的解密了~~~所以一定要注意密钥的安全.装上锁之后,
//你就要好好保管钥匙.
/// 加密字符串Encryption方法
/// 参数enString:要加密字符串
/// 参数enKey:加密密钥
/// 返回值:已经加密后的输出字符串
/// </summary>
public string Encryption(string enString,string enKey)
{
byte[] enKeyByte;
byte[] enStringByte;
//把输入的加密密钥编码
enKeyByte = System.Text.Encoding.UTF8.GetBytes(enKey.Substring(0,8));
//把输入的要加密的字符串编码
enStringByte = System.Text.Encoding.UTF8.GetBytes(enString);
//初始化一个DESCryptoServiceProvider类的一个对象,将用他来建造加密器
System.Security.Cryptography.DESCryptoServiceProvider dec=new DESCryptoServiceProvider();
//初始化内存流,用他暂时保存加密后的字符串
System.IO.MemoryStream ms = new System.IO.MemoryStream();
//初始化一个CryptoStream类的一个对象cs,用来把数据流连接到加密流,在这里我理解成把输入的要加密的数据流连接到要输出的加密后的数据流
//他有三个参数目标数据流就是加密流ms,要使用的转换这里是dec创建的加密器,流的模式这里是Write
System.Security.Cryptography.CryptoStream cs = new CryptoStream(ms,dec.CreateEncryptor(enKeyByte,but),System.Security.Cryptography.CryptoStreamMode.Write);
//把要加密的数据流写入到加密流
cs.Write(enStringByte,0,enStringByte.Length);
//清除缓冲区
cs.FlushFinalBlock();
//把正个流的内容写入字节数组,再将其转换成string形式(以64为基的数字)
string outputString = Convert.ToBase64String(ms.ToArray());
//返回加密后的字符串
return outputString;
}
/// <summary>
/// 解密字符串Decryption方法
/// </summary>
/// <param name="deString">参数deString代表要解密的字符串</param>
/// <param name="deKey">参数deKey代表解密密钥</param>
/// <returns>返回解密后的字符串</returns>
public string Decryption(string deString,string deKey)
{
byte[] deKeyByte;
byte[] deStringByte;
deKeyByte = System.Text.Encoding.UTF8.GetBytes(deKey.Substring(0,8));//把解密密钥进行编码
deStringByte = Convert.FromBase64String(deString);//把要解密的字符串转化成等效的8位无符号整数数组
System.Security.Cryptography.DESCryptoServiceProvider dec = new DESCryptoServiceProvider();
System.IO.MemoryStream ms = new System.IO.MemoryStream();
System.Security.Cryptography.CryptoStream cs = new CryptoStream(ms,dec.CreateDecryptor(deKeyByte,but),System.Security.Cryptography.CryptoStreamMode.Write);
cs.Write(deStringByte,0,deStringByte.Length);
cs.FlushFinalBlock();
string outputString = System.Text.Encoding.UTF8.GetString(ms.ToArray());
return outputString;
}
}
}