DES可以实现加密和解密,
Hash仅能实现加密,然后对密文进行比较处理。
des加解密参考:http://www.faceye.net/search/110023.html
加解密只是参考:http://blog.csdn.net/z1x1c1v1/article/details/8755032
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Security.Cryptography; using System.IO; namespace WinForms_Crypt { public partial class Form3 : Form { /// <summary> /// 加密解密方式 /// </summary> private enum CryptType { MD5,DES } /// <summary> /// 当前使用的加解密方式 /// </summary> CryptType type = CryptType.DES; public Form3() { InitializeComponent(); if (type == CryptType.MD5) { button_Decrypt.Enabled = false; button_Encrypt.Enabled = true; } else if (type == CryptType.DES) { button_Decrypt.Enabled = true; button_Encrypt.Enabled = true; } } /// <summary> /// 加密 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button_Encrypt_Click(object sender, EventArgs e) { //明文 string MingWen = textBox_DecryptText.Text.Trim(); //加密得到的密文 string MiWen = ""; if (MingWen != "") { if (type == CryptType.MD5) { MiWen = MD5_Crypt.GetHashStr(MingWen); } else if (type == CryptType.DES) { MiWen = DES_Crypt.Encrypt(MingWen); } } textBox_EncyptText.Text = MiWen; } /// <summary> /// 解密 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button_Decrypt_Click(object sender, EventArgs e) { //密文 string MiWen = textBox_EncyptText.Text.Trim(); //解密得到的明文 string MingWen = ""; //无法解析哈希值 if (MiWen != "") { if (type == CryptType.DES) MingWen = DES_Crypt.Decrypt(MiWen); else if (type == CryptType.MD5) { MessageBox.Show("MD5无法解密"); } } textBox_EncyptText.Text = MingWen; } } /// <summary> /// MD5加密 /// </summary> public class MD5_Crypt { #region 公共方法 /// <summary> /// MD5加密 /// </summary> /// <param name="inputByt">原文</param> /// <returns>加密后的字节数组</returns> public static byte[] GetHash(byte[] inputByt) { HashAlgorithm algorithm = HashAlgorithm.Create("MD5"); return algorithm.ComputeHash(inputByt); } /// <summary> /// MD5加密 /// </summary> /// <param name="inputStr">原文</param> /// <returns>加密后的字节数组</returns> public static byte[] GetHash(string inputStr) { byte[] inputByt = new UnicodeEncoding().GetBytes(inputStr); return GetHash(inputByt); } /// <summary> /// MD5加密 /// </summary> /// <param name="inputStr">原文</param> /// <returns>BASE64编码字符串</returns> public static string GetHashStr(string inputStr) { return Convert.ToBase64String(GetHash(inputStr)); } /// <summary> /// MD5加密 /// </summary> /// <param name="inputStr">原文</param> /// <returns>32位编码</returns> public static string GetHashString32(string inputStr) { string hash = BitConverter.ToString(GetHash(inputStr)); return hash.Replace("-", ""); } /// <summary> /// MD5加密 /// </summary> /// <param name="inputStr">原文</param> /// <returns>32位编码</returns> public static string GetHashString(byte[] inputStr) { string hash = BitConverter.ToString(GetHash(inputStr)); return hash.Replace("-", ""); } #endregion } public class DES_Crypt { /// <summary> /// 获取密钥 /// </summary> private static string Key { get { return @"P@+#wG%A"; } } /// <summary> /// 获取向量 /// </summary> private static string IV { get { return @"L*n67}G\Mk@k%:~Y"; } } /// <summary> /// DES加密 /// </summary> /// <param name="plainStr">明文字符串</param> /// <returns>密文</returns> public static string Encrypt(string plainStr) { byte[] bKey = Encoding.UTF8.GetBytes(Key); byte[] bIV = Encoding.UTF8.GetBytes(IV); byte[] byteArray = Encoding.UTF8.GetBytes(plainStr); string encrypt = null; DESCryptoServiceProvider des = new DESCryptoServiceProvider(); try { using (MemoryStream mStream = new MemoryStream()) { using (CryptoStream cStream = new CryptoStream(mStream, des.CreateEncryptor(bKey, bIV), CryptoStreamMode.Write)) { cStream.Write(byteArray, 0, byteArray.Length); cStream.FlushFinalBlock(); encrypt = Convert.ToBase64String(mStream.ToArray()); } } } catch { } des.Clear(); return encrypt; } /// <summary> /// DES解密 /// </summary> /// <param name="encryptStr">密文字符串</param> /// <returns>明文</returns> public static string Decrypt(string encryptStr) { byte[] bKey = Encoding.UTF8.GetBytes(Key); byte[] bIV = Encoding.UTF8.GetBytes(IV); byte[] byteArray = Convert.FromBase64String(encryptStr); string decrypt = null; DESCryptoServiceProvider des = new DESCryptoServiceProvider(); try { using (MemoryStream mStream = new MemoryStream()) { using (CryptoStream cStream = new CryptoStream(mStream, des.CreateDecryptor(bKey, bIV), CryptoStreamMode.Write)) { cStream.Write(byteArray, 0, byteArray.Length); cStream.FlushFinalBlock(); decrypt = Encoding.UTF8.GetString(mStream.ToArray()); } } } catch { } des.Clear(); return decrypt; } } }
原文:http://www.cnblogs.com/gsk99/p/5150382.html