DES和MD5加密与解密

    技术2022-05-11  58

     using System;using System.Data;using System.Configuration;using System.Web;using System.Security.Cryptography;using System.Text;using System.IO;using System.Windows.Forms;/// <summary>/// DesEncrypt 的摘要说明/// </summary>public class DesMd5{    public DesMd5() {  //  // TODO: 在此处添加构造函数逻辑  // }    /*//加密字符串,注意strEncrKey的长度为8位(如果要增加或者减少key长度,调整IV的长度就是了)public  string DesEncrypt(string strText, string strEncrKey)

    //解密字符串,注意strEncrKey的长度为8位(如果要增加或者减少key长度,调整IV的长度就是了)

    public string  DesDecrypt(string strText,string sDecrKey)

    //加密数据文件,注意strEncrKey的长度为8位(如果要增加或者减少key长度,调整IV的长度就是了)

    public void DesEncryptFile(string m_InFilePath,string m_OutFilePath,string strEncrKey)

    //解密数据文件,注意strEncrKey的长度为8位(如果要增加或者减少key长度,调整IV的长度就是了)

    public void DesDecryptFile(string m_InFilePath,string m_OutFilePath,string sDecrKey)

    //MD5加密

    public string MD5Encrypt(string strText)

    */

     

    /****************************************************************************************** *                    Cryptography class is for Cryptography                      author:Jim        e_mail:tjq_tang@hotmail.com                                  *        thanks: *        URI: *  *  *****************************************************************************************/

        /// <summary>    /// Encrypt the string    /// Attention:key must be 8 bits    /// </summary>    /// <param name="strText">string</param>    /// <param name="strEncrKey">key</param>    /// <returns></returns>    public string DesEncrypt(string strText, string strEncrKey)    {        byte[] byKey = null;        byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };        try        {            byKey = System.Text.Encoding.UTF8.GetBytes(strEncrKey.Substring(0, 8));            DESCryptoServiceProvider des = new DESCryptoServiceProvider();            byte[] inputByteArray = Encoding.UTF8.GetBytes(strText);            MemoryStream ms = new MemoryStream();            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write);            cs.Write(inputByteArray, 0, inputByteArray.Length);            cs.FlushFinalBlock();            return Convert.ToBase64String(ms.ToArray());

            }        catch (System.Exception error)        {           // MessageBox.Show(error.Message);            return "error:" + error.Message + "/r";        }    }    /// <summary>    /// Decrypt string    /// Attention:key must be 8 bits    /// </summary>    /// <param name="strText">Decrypt string</param>    /// <param name="sDecrKey">key</param>    /// <returns>output string</returns>    public string DesDecrypt(string strText, string sDecrKey)    {        byte[] byKey = null;        byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };        byte[] inputByteArray = new Byte[strText.Length];        try        {            byKey = System.Text.Encoding.UTF8.GetBytes(sDecrKey.Substring(0, 8));            DESCryptoServiceProvider des = new DESCryptoServiceProvider();            inputByteArray = Convert.FromBase64String(strText);            MemoryStream ms = new MemoryStream();            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write);            cs.Write(inputByteArray, 0, inputByteArray.Length);            cs.FlushFinalBlock();            System.Text.Encoding encoding = new System.Text.UTF8Encoding();            return encoding.GetString(ms.ToArray());        }        catch (System.Exception error)        {           // MessageBox.Show(error.Message);            return "error:" + error.Message + "/r";        }    }    /// <summary>    /// Encrypt files    /// Attention:key must be 8 bits    /// </summary>    /// <param name="m_InFilePath">Encrypt file path</param>    /// <param name="m_OutFilePath">output file</param>    /// <param name="strEncrKey">key</param>    public void DesEncryptFile(string m_InFilePath, string m_OutFilePath, string strEncrKey)    {        byte[] byKey = null;        byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };        try        {            byKey = System.Text.Encoding.UTF8.GetBytes(strEncrKey.Substring(0, 8));            FileStream fin = new FileStream(m_InFilePath, FileMode.Open, FileAccess.Read);            FileStream fout = new FileStream(m_OutFilePath, FileMode.OpenOrCreate, FileAccess.Write);            fout.SetLength(0);            //Create variables to help with read and write.            byte[] bin = new byte[100]; //This is intermediate storage for the encryption.            long rdlen = 0;              //This is the total number of bytes written.            long totlen = fin.Length;    //This is the total length of the input file.            int len;                     //This is the number of bytes to be written at a time.

                DES des = new DESCryptoServiceProvider();            CryptoStream encStream = new CryptoStream(fout, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write);

                //Read from the input file, then encrypt and write to the output file.            while (rdlen < totlen)            {                len = fin.Read(bin, 0, 100);                encStream.Write(bin, 0, len);                rdlen = rdlen + len;            }

                encStream.Close();            fout.Close();            fin.Close();

     

            }        catch (System.Exception error)        {            MessageBox.Show(error.Message, "错误信息");           // MessageBox.Show(error.Message.ToString());

            }    }    /// <summary>    /// Decrypt files    /// Attention:key must be 8 bits    /// </summary>    /// <param name="m_InFilePath">Decrypt filepath</param>    /// <param name="m_OutFilePath">output filepath</param>    /// <param name="sDecrKey">key</param>    public void DesDecryptFile(string m_InFilePath, string m_OutFilePath, string sDecrKey)    {        byte[] byKey = null;        byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };        try        {            byKey = System.Text.Encoding.UTF8.GetBytes(sDecrKey.Substring(0, 8));            FileStream fin = new FileStream(m_InFilePath, FileMode.Open, FileAccess.Read);            FileStream fout = new FileStream(m_OutFilePath, FileMode.OpenOrCreate, FileAccess.Write);            fout.SetLength(0);            //Create variables to help with read and write.            byte[] bin = new byte[100]; //This is intermediate storage for the encryption.            long rdlen = 0;              //This is the total number of bytes written.            long totlen = fin.Length;    //This is the total length of the input file.            int len;                     //This is the number of bytes to be written at a time.

                DES des = new DESCryptoServiceProvider();            CryptoStream encStream = new CryptoStream(fout, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write);

                //Read from the input file, then encrypt and write to the output file.            while (rdlen < totlen)            {                len = fin.Read(bin, 0, 100);                encStream.Write(bin, 0, len);                rdlen = rdlen + len;            }

                encStream.Close();            fout.Close();            fin.Close();

            }        catch (System.Exception error)        {            MessageBox.Show(error.Message, "错误信息");            //MessageBox.Show("error:" + error.Message);        }    }    /*    /// <summary>    /// MD5 Encrypt    /// </summary>    /// <param name="strText">text</param>    /// <returns>md5 Encrypt string</returns>    public string MD5Encrypt(string strText)    {        MD5 md5 = new MD5CryptoServiceProvider();        byte[] result = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(strText));        return System.Text.Encoding.Default.GetString(result);    }     */     ///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());    }

        //哈希加密    public string HashEncrypt(string plain)    {        byte[] buffer = System.Text.Encoding.UTF8.GetBytes(plain);        System.Security.Cryptography.SHA1CryptoServiceProvider sha =            new System.Security.Cryptography.SHA1CryptoServiceProvider();        byte[] hash = sha.ComputeHash(buffer);        System.Text.StringBuilder passwordBuilder = new System.Text.StringBuilder(32);        foreach (byte hashByte in hash)        {            passwordBuilder.Append(hashByte.ToString("x2"));        }

            return passwordBuilder.ToString();    } 

    }


    最新回复(0)