c#版本des MD5加密解密算法
2023-03-27 本文已影响0人
吉凶以情迁
static Encoding encoding = Encoding.UTF8;
public static string EncryptDES(string encryptString, string key)
{
var input = encoding.GetBytes(encryptString);
var ouptputData = ProcessDES(input, key, true);
var outputStr = Convert.ToBase64String(ouptputData);
//base64编码中有不能作为文件名的'/'符号,这里把它替换一下,增强适用范围
return outputStr;//.Replace('/', '@');
}
public static string DecryptDES(string decryptString, string key)
{
// decryptString = decryptString.Replace('@', '/');
var input = Convert.FromBase64String(decryptString);
var data = ProcessDES(input, key, false);
return encoding.GetString(data);
}
private static byte[] ProcessDES(byte[] data, string key, bool isEncrypt)
{
using (var dCSP = new DESCryptoServiceProvider())
{
var keyData = MD5EncodeBytes(key);
var rgbKey = new ArraySegment<byte>(keyData, 0, 8).ToArray();
var rgbIV = new ArraySegment<byte>(keyData, 8, 8).ToArray();
var dCSPKey = isEncrypt ? dCSP.CreateEncryptor(rgbKey, rgbIV) : dCSP.CreateDecryptor(rgbKey, rgbIV);
using (var memory = new MemoryStream())
using (var cStream = new CryptoStream(memory, dCSPKey, CryptoStreamMode.Write))
{
cStream.Write(data, 0, data.Length);
cStream.FlushFinalBlock();
return memory.ToArray();
}
}
}
/// <summary>
/// 字符串MD5加密
/// </summary>
/// <param name="Text">要加密的字符串</param>
/// <returns>密文</returns>
public static string MD5Encode(string Text)
{
byte[] buffer = System.Text.Encoding.Default.GetBytes(Text);
try
{
System.Security.Cryptography.MD5CryptoServiceProvider check;
check = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] somme = check.ComputeHash(buffer);
string ret = "";
foreach (byte a in somme)
{
if (a < 16)
ret += "0" + a.ToString("X");
else
ret += a.ToString("X");
}
return ret.ToLower();
}
catch
{
throw;
}
}
public static byte[] MD5EncodeBytes(string str)
{
using (var md5 = MD5.Create())
{
return md5.ComputeHash(Encoding.UTF8.GetBytes(str));
}
}
/// <summary>
/// C# DES加密方法 密钥和向量字符串长度必须为8.
/// </summary>
/// <param name="encryptedValue">要加密的字符串</param>
/// <param name="key">密钥</param>
/// <param name="iv">向量</param>
/// <returns>加密后的字符串</returns>
public static string DESEncrypt(string originalValue, string key, string iv)
{
using (DESCryptoServiceProvider sa
= new DESCryptoServiceProvider { Key = Encoding.UTF8.GetBytes(key), IV = Encoding.UTF8.GetBytes(iv) })
{
using (ICryptoTransform ct = sa.CreateEncryptor())
{
byte[] by = Encoding.UTF8.GetBytes(originalValue);
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, ct,
CryptoStreamMode.Write))
{
cs.Write(by, 0, by.Length);
cs.FlushFinalBlock();
}
return Convert.ToBase64String(ms.ToArray());
}
}
}
}
/// <summary>
/// C# DES解密方法 密钥和向量字符串长度必须为8.
/// </summary>
/// <param name="encryptedValue">待解密的字符串</param>
/// <param name="key">密钥</param>
/// <param name="iv">向量</param>
/// <returns>解密后的字符串</returns>
public static string DESDecrypt(string encryptedValue, string key, string iv)
{
using (DESCryptoServiceProvider sa =
new DESCryptoServiceProvider
{ Key = Encoding.UTF8.GetBytes(key), IV = Encoding.UTF8.GetBytes(iv) })
{
using (ICryptoTransform ct = sa.CreateDecryptor())
{
byte[] byt = Convert.FromBase64String(encryptedValue);
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, ct, CryptoStreamMode.Write))
{
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();
}
return Encoding.UTF8.GetString(ms.ToArray());
}
}
}
}