您的位置:首页 > 编程语言 > C#

c#中MD5的加密解密

2015-11-11 16:37 537 查看
从网上找到了一些相关的资料然后自己试着做了一下觉得收益匪浅。其实对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必须是同一个,如若不然就会报“输入的数据格式不对”错了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: