public class CryptoMemoryStream
{
private static readonly string _key = DateTime.Now.ToString("yyyyMMdd");
#region DESEncrypt DES加密
// <summary>
/// 进行DES加密。
/// </summary>
/// <param name="pToEncrypt">要加密的字符串。</param>
/// <param name="sKey">密钥,且必须为8位。</param>
/// <returns>以Base64格式返回的加密字符串。</returns>
public static string DESEncrypt(string pToEncrypt, string sKey)
{
try
{
using (var des = new DESCryptoServiceProvider())////把字符串放到byte数组中
{
byte[] inputByteArray = Encoding.UTF8.GetBytes(pToEncrypt);
des.Key = Encoding.ASCII.GetBytes(sKey);
des.IV = Encoding.ASCII.GetBytes(sKey);
var ms = new MemoryStream();
using (var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
}
string str = Convert.ToBase64String(ms.ToArray());
ms.Close();
return str.Replace("+", "$$");
}
}
catch(Exception ex)
{
throw new Exception(ex.Message);
}
}
#endregion
#region DESDecrypt DES解密
/// <summary>
/// 进行DES解密。
/// </summary>
/// <param name="pToDecrypt">要解密的以Base64</param>
/// <param name="sKey">密钥,且必须为8位。</param>
/// <returns>已解密的字符串。</returns>
public static string DESDecrypt(string pToDecrypt, string sKey)
{
try
{
byte[] inputByteArray = Convert.FromBase64String(pToDecrypt.Replace("$$", "+"));
using (var des = new DESCryptoServiceProvider())
{
des.Key = Encoding.ASCII.GetBytes(sKey);
des.IV = Encoding.ASCII.GetBytes(sKey);
var ms = new MemoryStream();
using (var cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
}
string str = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return str;
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
#endregion
/// <summary>
/// 加密
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
public static string EncryptAsc(string source)
{
return DESEncrypt(source, _key);
}
/// <summary>
/// 解密
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
public static string UnEncryptAsc(string source)
{
return DESDecrypt(source, _key);
}
}