DES加密解密:
1.添加using System.Security.Cryptography;和using System.IO;
2.密钥和向量长度必须为8,DES加密以后可以根据密钥和向量进行解密恢复原来的字符串
代码如下:
//密钥和向量字符串长度必须为8
public static class Des
{
private static string key = "12345678";
private static string iv = "87654321";
/// <param name="encryptedValue">待解密的字符串</param>
/// <param name="key">密钥</param>
/// <param name="iv">向量</param>
/// <returns>解密后的字符串</returns>
public static string DESDecrypt(string encryptedValue)
{
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());
}
}
}
}
/// <param name="encryptedValue">要加密的字符串</param>
/// <param name="key">密钥</param>
/// <param name="iv">向量</param>
/// <returns>加密后的字符串</returns>
public static string DESEncrypt(string originalValue)
{
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());
}
}
}
}
}
MD5加密验证:
1:添加using System.Security.Cryptography;
2.MD5加密以后没法解密,只能通过把字符串加密比较是否一致来判断验证是否通过
代码如下:
public static class Md5
{
public static string GetMd5Hash(string input)
{
MD5 md5Hash = MD5.Create();
byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
return sBuilder.ToString();
}
// Verify a hash against a string.
public static bool VerifyMd5Hash(string input, string hash)
{
string hashOfInput = GetMd5Hash(input);
StringComparer comparer = StringComparer.OrdinalIgnoreCase;
if (0 == comparer.Compare(hashOfInput, hash))
return true;
else
return false;
}
}
在main函数中添加对两种加密方式的测试,代码如下:
Console.WriteLine("DES加密解密");
String des = Des.DESEncrypt("Hello World!!!");
Console.WriteLine("加密后:{0}", des);
Console.WriteLine("解密后:{0}", Des.DESDecrypt(des));
Console.WriteLine("MD5加密验证");
string md5 = Md5.GetMd5Hash("Hello World!!!");
Console.WriteLine("加密后:{0}", md5);
Boolean flag = Md5.VerifyMd5Hash("hello world!!!", md5);
Console.WriteLine("加密字符串与hello world!!!比较:{0}", flag);
flag = Md5.VerifyMd5Hash("Hello World!!!", md5);
Console.WriteLine("加密字符串与Hello World!!!比较:{0}", flag);
Console.ReadLine();
输出结果: | ![]() |
个人订阅号: | ![]() |