张银的博客


Eat to live, but do not live to eat.

导航

MD5加密

Posted on 2009-05-02 16:34  张银  阅读(370)  评论(0编辑  收藏  举报
using System.Security.Cryptography;

  
//
  
//MD5加密函数
  
//
  public string MD5(String str)
  {
   MD5 md5
=new MD5CryptoServiceProvider();
   
byte[] data=System.Text.Encoding.Default.GetBytes(str);
   
byte[] result=md5.ComputeHash(data);
   String ret
="";
   
for(int i=0;i<result.Length;i++)
    ret
+=result[i].ToString("x").PadLeft(2,'0');
   
return ret;
  } 

 

using System;
using System.Security.Cryptography;
using System.Text;
class Example
{
    
// Hash an input string and return the hash as
    
// a 32 character hexadecimal string.
    static string getMd5Hash(string input)
    {
        
// Create a new instance of the MD5CryptoServiceProvider object.
        MD5 md5Hasher = MD5.Create();
        
// Convert the input string to a byte array and compute the hash.
        byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
        
// Create a new Stringbuilder to collect the bytes
        
// and create a string.
        StringBuilder sBuilder = new StringBuilder();
        
// Loop through each byte of the hashed data 
        
// and format each one as a hexadecimal string.
        for (int i = 0; i < data.Length; i++)
        {
            sBuilder.Append(data[i].ToString(
"x2"));
        }
        
// Return the hexadecimal string.
        return sBuilder.ToString();
    }
    
// Verify a hash against a string.
    static bool verifyMd5Hash(string input, string hash)
    {
        
// Hash the input.
        string hashOfInput = getMd5Hash(input);
        
// Create a StringComparer an comare the hashes.
        StringComparer comparer = StringComparer.OrdinalIgnoreCase;
        
if (0 == comparer.Compare(hashOfInput, hash))
        {
            
return true;
        }
        
else
        {
            
return false;
        }
    }

    
static void Main()
    {
        
string source = "Hello World!";
        
        
string hash = getMd5Hash(source);
        Console.WriteLine(
"The MD5 hash of " + source + " is: " + hash + ".");
        Console.WriteLine(
"Verifying the hash");
        
if (verifyMd5Hash(source, hash))
        {
            Console.WriteLine(
"The hashes are the same.");
        }
        
else
        {
            Console.WriteLine(
"The hashes are not same.");
        }
        
    }
}
// This code example produces the following output:
//
// The MD5 hash of Hello World! is: ed076287532e86365e841e92bfc50d8c.
// Verifying the hash
// The hashes are the same.
 
//SHA-1算法
string password = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(Password.Text, "SHA1");
//MD5算法
string password1 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(Password.Text, "MD5");
加密后生成不可逆密文保存到数据库中。用户登录时用加密计算后的密文与数据库中的密码密文比较。一致则通过验证,不一致则返回登录错误。

这种加密算法是不可逆的,所以除了用户自己,其他人无法得知用户的真实密码内容。
SHA-1算法和MD5算法的区别:
SHA-1比MD5多32位密文,所以更安全。由于同样的原因,MD5比SHA-1的运算速度更快。