您的位置:首页 > 编程语言 > ASP

ASP.net中md5加密码的方法

2006-03-29 16:50 369 查看
_ArticleContent1_lblContent><%@ 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());
//建立加密服务
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/J***A/ASP/PHP的MD5都是一样的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: