SHA1算法的散列值大小為160位。一般的加密方式為
byte[] data=System.Text.Encoding.Unicode.GetBytes(source.ToCharArray());
System.Security.Cryptography.SHA1 sha=new System.Security.Cryptography.SHA1CryptoServiceProvider();
byte[] result=sha.ComputeHash(data);
使用SHA1對密碼實現加密,需要使用以下的方法:
string EnPswdStr=System.Web.Security.FormsAuthentication.HashPassWordForStoringInConfigFile(source, "MD5");
或許有的人會問,既然都是采用SHA1方法加密,為什麼對密碼的加密就不能使用原方法呢?因為一般情況下SHA1方法加密出來的密碼並不是常規字符,有些字符甚至無法顯示出來,如果使用這樣的字符作為密碼,在存入數據庫時有些字符會被處理掉,這樣加密結果就會失真,在進行密碼驗證時就會出現無法預料的差錯。而采用密碼加密函數的話就避免了這一個問題,它加密出來的結果都是常規字符,在數據庫進行存儲和程序處理時不會失真。
下面是例子程序:
Default.ASPx
Code
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.ASPx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xHtml1-transitional.dtd">
<html XMLns="http://www.w3.org/1999/xHtml" >
<head runat="server">
<title>無標題頁</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server"></ASP:Label>
<br />
<br />
<asp:Label ID="Label2" runat="server"></ASP:Label>
<br />
<br />
<asp:TextBox ID="TextBox1" runat="server"></ASP:TextBox>
<br />
<input type="submit" />
</div>
</form>
</body>
</Html>
Default.ASPx.cs
Code
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClIEnt;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
//獲取要加密的字段,並轉化為byte[]數組
byte[] data = System.Text.Encoding.Unicode.GetBytes(TextBox1.Text.ToCharArray());
//建立加密服務
System.Security.Cryptography.SHA1 sha = new System.Security.Cryptography.SHA1CryptoServiceProvider();
//加密byte[]數組
byte[] result = sha.ComputeHash(data);
//將加密後的數組轉化為字符串
string sResult = System.Text.Encoding.Unicode.GetString(result);
//顯示出來
Label1.Text = "SHA1普通加密:" + sResult.ToString() + "<br/>";
//作為密碼方式加密
string EnPswdStr = System.Web.Security.FormsAuthentication.HashPassWordForStoringInConfigFile(TextBox1.Text.ToString(), "MD5");
//顯示出來
Label2.Text = "SHA1密碼加密:" + EnPswdStr + "<br/>";
}
}
}
運行效果圖:
輸入22然後點加密: