c#中MD5的加密解密

转载 2013年12月02日 13:49:37

从网上找到了一些相关的资料然后自己试着做了一下觉得收益匪浅。其实对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必须是同一个,如若不然就会报“输入的数据格式不对”错了。


http://blog.csdn.net/hgyin212314/article/details/5660365

C# MD5-16位加密实例,32位加密实例(两种方法)

出处:http://www.xuebuyuan.com/319511.html 1.MD5 16位加密实例 using System; using System.Collections.Ge...
  • u010158775
  • u010158775
  • 2016年01月21日 11:00
  • 3040

Java与C#通过MD5进行文件签名

在使用网络下载文件时,有时候需要对文件的完整性进行验证,防止文件下载过程中被恶意篡改。解决思路是可以通过服务器端对文件进行MD5签名,客户端下载文件完成后,也对下载文件进行签名,然后与服务器端的MD5...
  • guojie1689
  • guojie1689
  • 2014年03月04日 13:22
  • 995

C#遍历文件夹下所有文件通过MD5函数计算文件的MD5

获取 文件夹下所有文件的MD5值,包括文件夹下的子文件 代码: Winform前台编写: 代码建下边附件  private void btnOK_Click(object sender, EventA...
  • qq_17242011
  • qq_17242011
  • 2015年08月12日 17:38
  • 512

C# 实现Base64+MD5 加密(整理)

//解码类结束 public class Base64Decoder { char[] source; int length, length2, length3; int b...
  • kongwei521
  • kongwei521
  • 2015年01月30日 10:52
  • 2391

C#MD5加密算法的实例

using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptograph...
  • qq_18145031
  • qq_18145031
  • 2017年05月04日 11:15
  • 2059

C# winform 实现MD5加密功能

C# winform 实现MD5加密功能  : MD5的全称是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory f...
  • kingys1992
  • kingys1992
  • 2015年08月12日 21:33
  • 4115

C#使用MD5加密,DES加密解密的一个类

没什么好说的,直接上类。 using System; using System.IO; using System.Security.Cryptography; using System.Text; ...
  • xianglikai1
  • xianglikai1
  • 2017年02月05日 15:58
  • 1502

c# md5+DES加密实现

DES加密的密钥位数要为8位字符, 网上大多数代码用任意长度密钥时都只截取8位或者补足8位, 这种方法太随意. MD5算法正好将任意长度字符串生产16位byte, 刚好DES的密钥和密钥向量总共需要1...
  • Wake34
  • Wake34
  • 2016年09月14日 14:20
  • 412

MD5加密应用之.NET与JAVA差异分析

由于项目的特殊性,在项目中需要使用其他系统数据库中的用户信息对用户进行登录认证。在原系统(.NET所开发的)中,用户密码是进行加密存储的,如果需要使用原系统中现有的数据对用户进行认证,就必须要知道原系...
  • hjl_453444715
  • hjl_453444715
  • 2015年06月13日 15:35
  • 2334

[C#] 计算大文件的MD5的两种方式(直接调用方法计算,流计算-适用于大文件)

通过.NET中的默认类实现,但是采用不同类,针对不同的情况: 具体如下: 类: /// /// 文件MD5操作类 /// public class MD5Checker ...
  • qiujuer
  • qiujuer
  • 2014年02月17日 17:44
  • 5002
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c#中MD5的加密解密
举报原因:
原因补充:

(最多只允许输入30个字)