关闭

DES和MD5加密与解密

1896人阅读 评论(0) 收藏 举报

 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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:141896次
    • 积分:1838
    • 等级:
    • 排名:千里之外
    • 原创:22篇
    • 转载:65篇
    • 译文:1篇
    • 评论:37条
    文章分类
    源码网站