using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace EncryptAndDecrypt
{
public class CryptoUtil
{
//随机定义8个字节密钥和初始化向量
private byte[] Key_64 = new byte[] { 1, 2, 3, 3, 4, 5, 6, 4};
private byte[] IV_64 = new byte[] { 2, 3, 4, 5, 3, 4, 3, 2};
/// <summary>
/// 加密
/// </summary>
/// <param name="str">需要加密的字符串</param>
/// <returns>加密后的字符串</returns>
public string Encrypt(string str)
{
if (str == "") return str;
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, cryptoProvider.CreateEncryptor(Key_64, IV_64), CryptoStreamMode.Write);
StreamWriter sw = new StreamWriter(cs);
string cyrStr = "";
try
{
sw.Write(str);
sw.Flush();
cs.FlushFinalBlock();
ms.Flush();
//将加密后的字节数组转化为字符串
cyrStr = Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
}
finally
{
sw.Close();
cs.Close();
ms.Close();
cryptoProvider.Clear();
}
return cyrStr;
}
/// <summary>
/// 解密
/// </summary>
/// <param name="str">加密过的字符串</param>
/// <returns>解密后的字符串</returns>
public string Decrypt(string str)
{
if (str == "") return str;
//将字符串转换成字节数组
byte[] strbyte = Convert.FromBase64String(str);
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
MemoryStream ms = new MemoryStream(strbyte);
CryptoStream cs = new CryptoStream(ms, cryptoProvider.CreateDecryptor(Key_64, IV_64), CryptoStreamMode.Read);
StreamReader sr = new StreamReader(cs);
string uncryStr = "";
try
{
uncryStr = sr.ReadToEnd();
}
finally
{
sr.Close();
cs.Close();
ms.Close();
cryptoProvider.Clear();
}
return uncryStr;
}
}
public class Program
{
public static void Main(string[] args)
{
CryptoUtil crypt = new CryptoUtil();
string text = "KingSoft";
string en = crypt.Encrypt(text);
Console.WriteLine(en);
string de = crypt.Decrypt(en);
Console.WriteLine(de);
}
}
}