ASP.net中md5加密碼的方法

來源:互聯網
上載者:User
<%@ Page Language="C#" ContentType="text/html"%>
<%@ Import Namespace="System"%>
<script language="C#" runat="server">
void Page_Load(Object sender,EventArgs e){
//擷取要加密的欄位,並轉化為Byte[]數組
byte[] data=System.Text.Encoding.Unicode.GetBytes(source.Text.ToCharArray());
//建立Data Encryption Service
System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
//加密Byte[]數組
byte[] result= md5.ComputeHash(data);
//將加密後的數組轉化為欄位
string sResult=System.Text.Encoding.Unicode.GetString(result);
//顯示出來
sha1_1.Text="MD5普通加密:"+sResult.ToString()+"<br/>";
//作為密碼方式加密
string EnPswdStr=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(source.Text.ToString(),"MD5");
//顯示出來
sha1_2.Text="MD5密碼加密:"+EnPswdStr+"<br/>";
}
</script>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>測試</title>
</head>
<body>
<h3>SHA1加密</h3>
<form runat="server">
<asp:label id="sha1_1" runat="server"></asp:label>
<asp:label id="sha1_2" runat="server"></asp:label>
<asp:textbox ID="source" runat="server" TextMode="SingleLine" Text="test" AutoPostBack="true" />
(斷行符號)
</form>
</body>
</html> ==========================================================================這個是轉別人的,出處不明
ASP.NET實現MD5密碼編譯演算法

其實在.net 有一個最簡單實現MD5的方法

/// MD5加密
///
///被加密字串 /// 加密後的字串
public static string MD5(string toCryString)
{
return FormsAuthentication.HashPasswordForStoringInConfigFile(toCryString, "MD5");
}

public static string MD5(string str)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] result = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(str));
string str2 = "";
for(int i=0;i {
str2 += string.Format("{0:x}",result[i]);
}
return str2;
}

///

///對字串進行MD5編碼*/
///傳回值:編碼後的MD5密碼串
///輸入:預加密的原字串
///
//////
public static string SysEncode(string xStr)
{
string str = "";
try
{
//字串前加pz標識
xStr = "pz" + xStr;
str = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(xStr,"md5").ToString();

}
catch
{
str = ""; //error
}
return str; //返回加密後的字串
}

結算加密出來的結果,寫java,php,asp等標準演算法不同!
其實在.net 有一個最簡單實現MD5的方法
/**////

/// MD5加密
///
///被加密字串 /// 加密後的字串
public static string MD5(string toCryString)
{
return FormsAuthentication.HashPasswordForStoringInConfigFile(toCryString, "MD5");
}
那麼,從byte到字串的標準轉法怎麼轉呢,我看了,Quickstart用的是
BitConverter.ToString
這樣標準md5寫法要寫成!
public static string MD5(string toCryString)
{
MD5CryptoServiceProvider hashmd5;
hashmd5 = new MD5CryptoServiceProvider();
return BitConverter.ToString(hashmd5.ComputeHash(Encoding.Default.GetBytes(toCryString))).Replace("-","").ToLower();//asp 是小寫,把所有字元變小寫
}
結果加密出來的內容,和標準的一樣了!

這個問題我已經解決了,在上次CSDN伺服器出問題以前,我發過文章。

因為現在在一般Asp下使用的MD5演算法,使用的是老外寫的一個vbScript演算法,他內部使用的是16位演算法,而.net演算法天生就是32位的。

大概我上面的解釋不對,但是可以確定一點,就是asp下的md5演算法與.net下的內建演算法是不相容的。沒有任何辦法可以讓他們所出的結果一致。

不 過有個變通的法子。原理是在ms平台上,所有的指令碼語言,包括vbScript,JavaScript和JScript,都是使用同一個指令碼處理器,名稱 是ScriptHost,在微軟官方下載站搜尋Script56就可以找到。對這個ScriptHost,微軟推出了一個Com組件,這個組件專門經過處 理,可以供.net的運行庫通過它可以調用並控制這個ScriptHost。

利用上面的法子,在asp.net網站上,安裝這個控制器,就可以調用ScriptHost。

調用過程是,首先在 http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=D05FCF37-4D9F-4769-9442-0BCEEF907033處下載微軟的官方ScriptHostControl控制項,然後安裝,安裝完畢後。開啟vs.net,然後在項目的方案總管中選擇項目的"引用"節點,選擇添加引用,然後定位到剛才安裝時選擇的目錄中的msscript.ocx檔案。

然 後把asp中,計算md5的演算法代碼(注意不能包含Response,Request這樣的asp專用對象)複製到一個vbs檔案中。在vs.net中寫 代碼使用StreamReader類把這個vbs檔案讀取到一個字串變數中,然後調用剛才的引用對象控制ScriptHost,把vbs代碼賦於這個 host,然後讀取結果,即可得到與asp同樣的結果。

我已經寫好了範例文件,包括一個asp下的md5演算法vbScript指令檔,一個asp.net頁面和相對的.cs檔案。壓縮包內還包括了ScriptControl這個ActiveX控制項,如果不相信我,可以到上面的微軟地址去下載。
樣本下載在:http://submaie.aspsir.com/temp/CSharpRunScript.rar

ASP中MD5的加密對於英文字母或數字(既單位元組),與ASP.NET中的演算法結果是一樣的。

不同指出是:ASP中的MD5普通是小寫,.NET中是大寫。

如 果你的ASP加密結果是16位的,估計你使用的動網論壇的那個MD5類。動網論壇只取了,32位 MD5 的中間16位。這時候可以更改ASP的MD5類(只是最後一句話"MD5=LCase(WordToHex(b) & WordToHex(c))"改成"LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))")。實現ASP中的結果也是32位。或者取.NET加密結果的時候只取中間16位。

如果是因為雙位元組問題。恐怕沒有什麼太好的解決辦法。單位元組的話,無論.NET/JAVA/ASP/PHP的MD5都是一樣的。

轉自:http://blog.csdn.net/JOHNCOOLS/archive/2006/03/29/643301.aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.