public static class CryptoHelper
{
#region Private field
/// <summary>
/// Hash algorithm
/// </summary>
private static SHA1 sha;
/// <summary>
/// Crypto transformer of encryption
/// </summary>
private static ICryptoTransform et;
/// <summary>
/// Crypto transformer of decryption
/// </summary>
private static ICryptoTransform dt;
#endregion
#region Constructor
/// <summary>
/// ¹¹Ô캯Êý¡£
/// </summary>
/// <remarks>ÎÞ²ÎÊýµÄ¹¹Ô캯Êý£¬ÓÃĬÈϵķ½Ê½³õʼ»¯¸÷¸öÊôÐÔ¡£
/// </remarks>
static CryptoHelper()
{
CryptoHelper.sha = new SHA1CryptoServiceProvider();
DESCryptoServiceProvider cryptoService = new DESCryptoServiceProvider();
byte[] cryptoKey = { 136, 183, 142, 217, 175, 71, 90, 239 };
byte[] cryptoIV = { 227, 105, 5, 40, 162, 158, 143, 156 };
cryptoService.Key = cryptoKey;
cryptoService.IV = cryptoIV;
CryptoHelper.et = cryptoService.CreateEncryptor();
CryptoHelper.dt = cryptoService.CreateDecryptor();
}
#endregion
#region hash / comparehash
private static byte[] CreateHash(byte[] plaintext)
{
return CryptoHelper.sha.ComputeHash(plaintext);
}
public static string CreateHash(string plaintext)
{
byte[] plainTextBytes = UnicodeEncoding.Unicode.GetBytes(plaintext);
byte[] resultBytes = CreateHash(plainTextBytes);
return Convert.ToBase64String(resultBytes);
}
private static bool HashCheck(byte[] plaintext, byte[] hashedText)
{
if ((hashedText == null) || (hashedText.Length <= 0))
return false;
byte[] hashedResult = CryptoHelper.sha.ComputeHash(plaintext);
if (hashedText.Length != hashedResult.Length)
return false;
for (int i = 0; i < hashedResult.Length; i++)
{
if (hashedText[i] != hashedResult[i])
return false;
}
return true;
}
public static bool HashCheck(string plaintext, string hashedText)
{
byte[] plainTextBytes = UnicodeEncoding.Unicode.GetBytes(plaintext);
byte[] hashedTextBytes = Convert.FromBase64String(hashedText);
bool result = HashCheck(plainTextBytes, hashedTextBytes);
return result;
}
#endregion
#region nvative key encrypt / decrypt
public static string Decrypt(string source)
{
byte[] buff = Convert.FromBase64String(source);
using (MemoryStream mem = new MemoryStream())
{
using (CryptoStream stream = new CryptoStream(mem, CryptoHelper.dt, CryptoStreamMode.Write))
{
stream.Write(buff, 0, buff.Length);
stream.Close();
}
return Encoding.Unicode.GetString(mem.ToArray());
}
}
public static string Encrypt(string source)
{
byte[] buff = Encoding.Unicode.GetBytes(source);
MemoryStream mem = new MemoryStream();
CryptoStream stream = new CryptoStream(mem, CryptoHelper.et, CryptoStreamMode.Write);
stream.Write(buff, 0, buff.Length);
stream.FlushFinalBlock();
stream.Clear();
return Convert.ToBase64String(mem.ToArray());
}
#endregion
#region encode / decode
private const string CodePageName = "utf-32";
public static string Encode(string source)
{
byte[] buffer = Encoding.GetEncoding(CodePageName).GetBytes(source);
return Convert.ToBase64String(buffer);
}
public static string Decode(string source)
{
byte[] buffer = Convert.FromBase64String(source);
return Encoding.GetEncoding(CodePageName).GetString(buffer);
}
#endregion
}
一个通用的字符串加密和编码工具类
最新推荐文章于 2022-03-12 21:18:02 发布