详解C#实现MD5加密的示例代码

C#实现MD5加密,具体如下:

方法一

首先,先简单介绍一下MD5

MD5的全称是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer science和rsa data security inc的ronald l. rivest开发出来, 经md2、md3和md4发展而来。

MD5具有很好的安全性(因为它具有不可逆的特征,加过密的密文经过解密后和加密前的东东相同的可能性极小)

引用

using System.Security.Cryptography;
using System.Text;

具体代码如下(写在按钮的Click事件里):

byte[] result = Encoding.Default.GetBytes(this.tbPass.Text.Trim());  //tbPass为输入密码的文本框
MD5 md5 = new MD5CryptoServiceProvider();
byte[] output = md5.ComputeHash(result);
this.tbMd5pass.Text = BitConverter.ToString(output).Replace("-",""); //tbMd5pass为输出加密文本的文本框

方法二

C# md5加密(上)

string a; //加密前数据
string b; //加密后数据
b=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(a,"MD5")

using  System;
using  System.Security.Cryptography;

方法2

public  static  string  GetMD5(string  myString)
{
MD5  md5   =  new  MD5CryptoServiceProvider();
byte[]  fromData  =  System.Text.Encoding.Unicode.GetBytes(myString);
byte[]  targetData  =  md5.ComputeHash(fromData);
string  byte2String  =  null;

for  (int  i=0;  i<targetData.Length;  i++)
{
byte2String  +=  targetData[i].ToString("x");
}

return  byte2String;
} 

using  System.Security.Cryptography;

///  <summary>
///  给一个字符串进行MD5加密
///  </summary>
///  <param  name="strText">待加密字符串</param>
///  <returns>加密后的字符串</returns>
public  static  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);
}

C# MD5加密

using System.Security.Cryptography;

private void btnOK_Click(object sender, System.EventArgs e)
{
  string strConn = "server=192.168.0.51;database=chengheng;User id=sa; password=123";
  if(texName.Text.Trim()=="")
  {
  this.RegisterStartupScript("sf","<script language='javascript'>alert('用户名不能为空');document.all('texName').focus()</script>");
  return;
  }
  else if(texPassword.Text.Trim()=="")
  {
  this.RegisterStartupScript("sfs","<script language='javascript'>alert('密码不能为空');document.all('texPassword').focus()</script>");
  return;
  }
  else
  {
  //将获取的密码加密与数据库中加了密的密码相比较
  byte[] by = md5.ComputeHash(utf.GetBytes(texPassword.Text.Trim()));
  string resultPass = System.Text.UTF8Encoding.Unicode.GetString(by);
  conn.ConnectionString=strConn;
  SqlCommand comm = new SqlCommand();
  string name = texName.Text.Trim().ToString();
  comm.CommandText="select Ruser_pwd,Ruser_nm from Ruser where Accountno = @name";
  comm.Parameters.Add("@name",SqlDbType.NVarChar,40);
  comm.Parameters["@name"].Value=name;
  try
  {
   conn.Open();
   comm.Connection=conn;
   SqlDataReader dr=comm.ExecuteReader();
   if(dr.Read())
   {
   //用户存在,对密码进行检查
   if(dr.GetValue(0).Equals(resultPass))
   {
    string user_name=dr.GetValue(1).ToString();
    string user_Accountno=texName.Text.Trim();
    Session["logon_name"]=user_name;
    Session["logon_Accountno"]=user_Accountno;
    //登录成功,进行页面导向

   }
   else
   {
    this.RegisterStartupScript("wp","<script language='javascript'>alert('密码错误,请检查。')</script>");
   }

   }
   else
   {
   this.RegisterStartupScript("nu","<script language=javascript>alert('用户名不存在,请检查。')</script>");
   }
  }
  catch(Exception exec)
  {
   this.RegisterStartupScript("wc","<script language=javascript>alert('网络连接有异,请稍后重试。')</script>");
  }
  finally
  {
   conn.Close();
  }
  }
}

方法三

C#开发笔记

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

环境:vs.net2005/sql server2000/xp测试通过

1.MD5 16位加密实例

using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;

namespace md5
{
  class Program
  {
    static void Main(string[] args)
    {
       Console.WriteLine(UserMd5("8"));
       Console.WriteLine(GetMd5Str("8"));
     }
    /**//// <summary>
    /// MD5 16位加密 加密后密码为大写
    /// </summary>
    /// <param name="ConvertString"></param>
    /// <returns></returns>
    public static string GetMd5Str(string ConvertString)
    {
       MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
      string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)), 4, 8);
       t2 = t2.Replace("-", "");
      return t2;
     }

 /**//// <summary>
    /// MD5 16位加密 加密后密码为小写
    /// </summary>
    /// <param name="ConvertString"></param>
    /// <returns></returns>
    public static string GetMd5Str(string ConvertString)
    {
       MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
      string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)), 4, 8);
       t2 = t2.Replace("-", "");

      t2 = t2.ToLower();

       return t2;
     }

    /**//// <summary>
    /// MD5 32位加密
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    static string UserMd5(string str)
    {
      string cl = str;
      string pwd = "";
       MD5 md5 = MD5.Create();//实例化一个md5对像
      // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
      byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
      // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
      for (int i = 0; i < s.Length; i++)
      {
        // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 

         pwd = pwd + s[i].ToString("X");

       }
      return pwd;
     }
   }
}
using System.Security.Cryptography;
using System.Text; 

public static string StringToMD5Hash(string inputString)
    {
      MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
      byte[] encryptedBytes = md5.ComputeHash(Encoding.ASCII.GetBytes(inputString));
      StringBuilder sb = new StringBuilder();
      for (int i = 0; i < encryptedBytes.Length; i++)
      {
        sb.AppendFormat("{0:x2}", encryptedBytes[i]);
      }
      return sb.ToString();
    }


二、首先在界面中引入:using System.Web.Security;

假设密码对话框名字password,对输入的密码加密后存入变量pwd中,语句如下:

 string pwd = FormsAuthentication.HashPasswordForStoringInConfigFile(password.Text, "MD5");

如果要录入则录入pwd,这样数据库实际的密码为202*****等乱码了。

如果登录查询则要:

select username,password from users where username='"+ UserName.Text +"' and password='"+ pwd +"'

因为MD5不能解密,只能把原始密码加密后与数据库中加密的密码比较

三、C# MD5 加密方法 16位或32位

 public string md5(string str,int code)
 {
  if(code==16) //16位MD5加密(取32位加密的9~25字符)
  {
    return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,"MD5").ToLower().Substring(8,16) ;
  }
  else//32位加密
  {
    return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,"MD5").ToLower();
  }
 }

四、做一个网站时,必然涉及用户登录,用户登录必然涉及密码,密码必然涉及安全,安全必然涉及加密。

加密现时最流行也是据说最安全的算法是MD5算法,MD5是一种不可逆的算法,也就是 明文经过加密后,根据加密过的密文无法还原出明文来。

目前有好多网站专搞MD5破密,百度上搜一下MD5就搜出一大堆了,今天早上无聊试了几个破密网站,6位以内纯数字密码的MD5密文可以还原出明文,长点的或带字符的就不行了。他们是采用穷举对比的,就是说把收录到的明文和密文放到数据库里,通过密文的对比来确定明文,毕竟收录的数据有限,所以破解的密码很有限。

扯远了,搞破密MD5需要大量的MONEY,因为要一个运算得超快的计算机和一个查找性能超好的数据库和超大的数据库收录。但搞加密就比较简单。以下是我用C#写的一个MD5加密的方法,用到.NET中的方法, 通过MD5_APP.StringToMD5(string str, int i)可以直接调用:

public class MD5_APP
{
 public MD5_APP()
 {

 }

  public static string StringToMD5(string str, int i)
  {
    //获取要加密的字段,并转化为Byte[]数组
    byte[] data = System.Text.Encoding.Unicode.GetBytes(str.ToCharArray());
    //建立加密服务
    System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
    //加密Byte[]数组
    byte[] result = md5.ComputeHash(data);
    //将加密后的数组转化为字段
    if (i == 16 && str != string.Empty)
    {
      return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower().Substring(8, 16);
    }
    else if (i == 32 && str != string.Empty)
    {
      return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower();
    }
    else
    {
      switch (i)
      {
        case 16: return "000000000000000";
        case 32: return "000000000000000000000000000000";
        default: return "请确保调用函数时第二个参数为16或32";
      }

    }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C#实现对AES加密和解密的方法

    AES简介 AES(The Advanced Encryption Standard)是美国国家标准与技术研究所用于加密电子数据的规范.它被预期能成为人们公认的加密包括金融.电信和政府数字信息的方法. AES 是一个新的可以用于保护电子数据的加密算法.明确地说,AES 是一个迭代的.对称密钥分组的密码,它可以使用128.192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据.与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据.通过分组密码返回的加密数据

  • C#文件加密方法汇总

    本文实例汇总了C#文件加密方法.分享给大家供大家参考.具体实现方法如下: 1.AES加密类 复制代码 代码如下: using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Utils {     /// <summary>     /// AES加密解密     /// </summary>     public class AES     {   

  • c#实现md5加密示例

    复制代码 代码如下: public static string  EncryptWithMD5(string source)    {        byte [] sor=Encoding.UTF8.GetBytes(source);        MD5 md5=MD5.Create();        byte [] result= md5.ComputeHash(sor);        StringBuilder strbul=new StringBuilder(40);       

  • c# 实现MD5,SHA1,SHA256,SHA512等常用加密算法源代码

    复制代码 代码如下: using System; using System.IO; using System.Data; using System.Text; using System.Diagnostics; using System.Security; using System.Security.Cryptography; /**//* * .Net框架由于拥有CLR提供的丰富库支持,只需很少的代码即可实现先前使用C等旧式语言很难实现的加密算法.本类实现一些常用机密算法,供参考.其中MD5算

  • C#加密算法汇总(推荐)

    方法一: 复制代码 代码如下: //须添加对System.Web的引用 using System.Web.Security; ... /// <summary> /// SHA1加密字符串 /// </summary> /// <param name="source">源字符串</param> /// <returns>加密后的字符串</returns> public string SHA1(string sour

  • c#多种加解密示例(md5加密解密)

    复制代码 代码如下: using System;using System.Collections.Generic;using System.Globalization;using System.IO;using System.Security.Cryptography;using System.Text; /// <summary>/// 加解密/// </summary>public static class CryptHelper{    #region RSA加密 /// &

  • C#计算文件MD5校验的方法

    本文实例讲述了C#计算文件MD5校验的方法.分享给大家供大家参考.具体分析如下: C#计算文件的MD5校验,从互联网上下载一个文件,可以使用下面的代码对文件进行MD5校验,看看生成的MD5编码是否和网站提供的一致,如果不一致则表示文件被修改过了,要慎重. protected string GetMD5HashFromFile(string fileName) { FileStream file = new FileStream(fileName,FileMode.Open); MD5 md5 =

  • C#生成MD5的函数代码

    复制代码 代码如下: public static string GetMD5(string sDataIn)        {            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();            byte[] bytValue, bytHash;            bytValue = System.Text.Encoding.UTF8.GetBytes(sDataIn);         

  • 浅谈C#中Md5和Sha1两种加密方式

    1.新建控制台应用程序 2.新建类 EncryptHelper.cs public static class EncryptHelper { /// <summary> /// 基于Md5的自定义加密字符串方法:输入一个字符串,返回一个由32个字符组成的十六进制的哈希散列(字符串). /// </summary> /// <param name="str">要加密的字符串</param> /// <returns>加密后的十六

  • C#实现的MD5加密功能与用法示例

    本文实例讲述了C#实现的MD5加密功能与用法.分享给大家供大家参考,具体如下: 1.创建MD5Str.cs加密处理类 public class MD5Str { /// <summary> /// 字符串MD5加密 /// </summary> /// <param name="Text">要加密的字符串</param> /// <returns>密文</returns> public static string

  • 基于C#对用户密码使用MD5加密与解密

    C#中常涉及到对用户密码的加密于解密的算法,其中使用MD5加密是最常见的的实现方式.本文总结了通用的算法并结合了自己的一点小经验,分享给大家. 一.使用16位.32位.64位MD5方法对用户名加密 1)16位的MD5加密 /// <summary> /// 16位MD5加密 /// </summary> /// <param name="password"></param> /// <returns></returns&

随机推荐