zoukankan      html  css  js  c++  java
  • ASP.net中md5加密码的方法[转]

    <%@ 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/JAVA/ASP/PHP的MD5都是一样的。


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

  • 相关阅读:
    c++函数学习-关于c++函数的林林总总
    STL学习笔记(七) 程序中使用STL
    STL学习笔记(六) 函数对象
    本学期总结与课程建议
    12.19
    12.18Tomcat相关知识
    12.17
    12.16
    12.15
    12.14
  • 原文地址:https://www.cnblogs.com/craig/p/1617754.html
Copyright © 2011-2022 走看看