摘自:http://blog.csdn.net/shenghui188/archive/2010/03/28/5423959.aspx

方法一

首先,先简单介绍一下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# MD5加密

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";             }

}     }

C#实现MD5加密的更多相关文章

  1. 关于CryptoJS中md5加密以及aes加密的随笔

    最近项目中用到了各种加密,其中就包括从没有接触过得aes加密,因此从网上各种查,官方的一种说法: 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学 ...

  2. Android数据加密之MD5加密

    前言: 项目中无论是密码的存储或者说判断文件是否是同一文件,都会用到MD5算法,今天来总结一下MD5加密算法. 什么是MD5加密? MD5英文全称“Message-Digest Algorithm 5 ...

  3. android MD5加密

    public class MD5Uutils {    //MD5加密,32位    public static String MD5(String str) {        MessageDige ...

  4. IOS 杂笔-9 (MD5 加密)

    首先是一段对MD5的简介 *出自一位大牛之手* Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护 ...

  5. JS中使用MD5加密

    下载 MD5 使用MD5加密的方法:下载md5.js文件,在网页中引用该文件: < script type="text/javascript" src="md5.j ...

  6. MD5工具类,提供字符串MD5加密、文件MD5值获取(校验)功能

    MD5工具类,提供字符串MD5加密(校验).文件MD5值获取(校验)功能 : package com.yzu.utils; import java.io.File; import java.io.Fi ...

  7. MD5 加密

    字符串加密 // 1. 准备好一个字符串 NSString *string = @"asdasfaf"; // 2. MD5加密是基于C语言的. 所以要把这个字符串转化成C的字符串 ...

  8. MD5加密的Java实现

    在各种应用系统中,如果需要设置账户,那么就会涉及到储存用户账户信息的问题,为了保证所储存账户信息的安全,通常会采用MD5加密的方式来,进行储存.首先,简单得介绍一下,什么是MD5加密. MD5的全称是 ...

  9. 【ORACLE】MD5加密

        今天乌干达充值卡入库时,发现有资源已经存在的异常, 异常原因经过核实是由于卡资源密码在库中已经存在, 为进一步查找存在的原因, 因此需要对导入文件密码的MD5 加密, 通过MD5加密后的字符串 ...

  10. 一个简单的后台与数据库交互的登录与注册[sql注入处理,以及MD5加密]

    一.工具: vs2013[因为我现在用的也是2013,版本随便你自己开心] sql2008[准备过久升级] 二.用到的语言: HTML+CSS+Jquery+Ajax+sqlserver HTML[相 ...

随机推荐

  1. Dirty Markup - 在线代码美化工具

    如果你需要一个帮助你规整书写混乱的代码的工具的话,我强烈推荐给你这个在线代码美化工具 - Dirty Markup.这个在线工具能够帮助你有效的处理HTML/HTML5,CSS和javascript代 ...

  2. Linux下查看文件内容的命令

    查看文件内容的命令: cat     由第一行开始显示内容,并将所有内容输出 tac     从最后一行倒序显示内容,并将所有内容输出 more    根据窗口大小,一页一页的现实文件内容 less ...

  3. EF-联合查询-结果集-Group by-统计数目

    EF框架用着痛并且快乐着··· 毕竟用习惯了SQL语句直接硬查的··· SELECT C0.ID,C_C.Name,C_C.C_COUNT FROM article_type C0 INNER JOI ...

  4. phpcms2008 常用数组,变量整理

    代码:$_userid 用户id $_username 用户名 $_areaid 地区id $_groupid 用户组id $_modelid $_amount 用户资金 $_point 用户点数 $ ...

  5. ajax读取XML文本(如读取城市)

    //加载城市 function loadArea_pep() { $.ajax({ url: "/xmlFile/crty.xml", success: function (res ...

  6. python 列表推导式

    squares = [x**2 for x in range(10)] 相当于squares = map(lambda x: x**2, range(10)),但是更简洁和易读.傻逼才会用最古老的fo ...

  7. UIView动画效果

    做出UI界面,实现程序功能,是重中之重,但是通过动画提升使用体验,一般人应该不会拒绝吧. 那么问题又来了,怎么做? 一: 稳扎稳打: 一步一步来吧,毕竟,心急吃不了热豆腐. 1.开启一个动画 2,设置 ...

  8. 剑指Offer 二叉树的镜像

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ ...

  9. 27 GroupSock概述(一)——live555源码阅读(四)网络

    27 GroupSock概述(一)——live555源码阅读(四)网络 27 GroupSock概述(一)——live555源码阅读(四)网络 简介 1.网络通用数据类型定义 2.Tunnel隧道封装 ...

  10. POJ 2195 Going Home 最小费用最大流 尼玛,心累

    D - Going Home Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Subm ...