C# MD5加密解密类 winform

从网上找到了一些相关的资料然后自己试着做了一下觉得收益匪浅。其实对MD5的加密解密,我们知道怎么调用就好了,其实也没有什么太多的必要去看其算法。以下代码希望对观望的读者有用。

MD5加密解密的两个类:

其中的一个加密解密类:

using System;

using System.Collections.Generic;

using System.Text;

using System.Globalization;

using System.Security.Cryptography;

using System.IO;

namespace WindowsApplication2

{

class DES

{

// 创建Key

public string GenerateKey()

{

DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create();

return ASCIIEncoding.ASCII.GetString(desCrypto.Key);

}

///MD5加密

public string MD5Encrypt(string pToEncrypt, string sKey)

{

DESCryptoServiceProvider des = new DESCryptoServiceProvider();

byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);

des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);

des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

MemoryStream ms = new MemoryStream();

CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);

cs.Write(inputByteArray, 0, inputByteArray.Length);

cs.FlushFinalBlock();

StringBuilder ret = new StringBuilder();

foreach (byte b in ms.ToArray())

{

ret.AppendFormat("{0:X2}", b);

}

ret.ToString();

return ret.ToString();

}

///MD5解密

public string MD5Decrypt(string pToDecrypt, string sKey)

{

DESCryptoServiceProvider des = new DESCryptoServiceProvider();

byte[] inputByteArray = new byte[pToDecrypt.Length / 2];

for (int x = 0; x < pToDecrypt.Length / 2; x++)

{

int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));

inputByteArray[x] = (byte)i;

}

des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);

des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

MemoryStream ms = new MemoryStream();

CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);

cs.Write(inputByteArray, 0, inputByteArray.Length);

cs.FlushFinalBlock();

StringBuilder ret = new StringBuilder();

return System.Text.Encoding.Default.GetString(ms.ToArray());

}

}

}

另外一个加密解密类:

using System;

using System.Text;

using System.IO;

using System.Globalization;

using System.Security.Cryptography;

using System.Collections.Generic;

namespace WindowsApplication2

{

class MD5

{

// 创建Key

public string GenerateKey()

{

DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create();

return ASCIIEncoding.ASCII.GetString(desCrypto.Key);

}

// 加密字符串

public string EncryptString(string sInputString, string sKey)

{

byte[] data = Encoding.UTF8.GetBytes(sInputString);

DESCryptoServiceProvider DES = new DESCryptoServiceProvider();

DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);

DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

ICryptoTransform desencrypt = DES.CreateEncryptor();

byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length);

return BitConverter.ToString(result);

}

// 解密字符串

public string DecryptString(string sInputString, string sKey)

{

string[] sInput = sInputString.Split("-".ToCharArray());

byte[] data = new byte[sInput.Length];

for (int i = 0; i < sInput.Length; i++)

{

data[i] = byte.Parse(sInput[i], NumberStyles.HexNumber);

}

DESCryptoServiceProvider DES = new DESCryptoServiceProvider();

DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);

DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

ICryptoTransform desencrypt = DES.CreateDecryptor();

byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length);

return Encoding.UTF8.GetString(result);

}

}

}

调用这两个类:

public partial class EDForm : Form

{

public EDForm()

{

InitializeComponent();

}

DES des = new DES();

string key = null;

/// <summary>

/// 加密字符串

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void button1_Click(object sender, EventArgs e)

{

key = des.GenerateKey();

this.textBox2.Text = des.MD5Encrypt(textBox1.Text,key);

}

private void button2_Click(object sender, EventArgs e)

{

MessageBox.Show(des.MD5Decrypt(textBox2.Text, key));

}

}

注意:在调用时key必须是同一个,如若不然就会报“输入的数据格式不对”错了。