using System;
using System.Collections.Generic;
using System.Text;
using System.Security;
using System.IO;
using System.Security.Cryptography;
namespace DLProject
{
class EncryptAndDecrypt
{
/// <summary>
/// 对字符串进行DES加密
/// </summary>
/// <param >将要加密的字符串</param>
/// <param >密钥值(需为8位字符串)</param>
/// <returns></returns>
public string EncryptString(string sInputString, string sKey)
{
byte[] data = Encoding.ASCII.GetBytes(sInputString);
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream(); //创建其支持存储区为内存的流。
CryptoStream cs = new CryptoStream(ms, DES.CreateEncryptor(), CryptoStreamMode.Write);//将数据流连接到加密转换流
cs.Write(data, 0, data.Length);
cs.FlushFinalBlock(); //用缓冲区的当前状态更新基础数据源或储存库,随后清除缓
StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
return ret.ToString();
}
// DES解密字符串
public string DecryptString(string sInputString, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//Put the input string into the byte array
byte[] inputByteArray = new byte[sInputString.Length / 2];
for (int x = 0; x < sInputString.Length; x += 2)
{
int i = Convert.ToInt32(sInputString.Substring(x, 2), 16);
inputByteArray[x / 2] = (byte)i;
}
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
//Flush the data through the crypto stream into the memory stream
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//Get the decrypted data back from the memory stream
//建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象
StringBuilder ret = new StringBuilder();
return System.Text.Encoding.UTF8.GetString(ms.ToArray());
}
}
}