FormsAuthentication.HashPasswordForStoringInConfigFile 方法 之研究

来源:互联网 发布:python 运算符 编辑:程序博客网 时间:2024/06/02 03:21
 

给定标识哈希类型的密码和字符串,该例程产生一个适合存储在配置文件中的哈希密码。

 

[C#]

public static string HashPasswordForStoringInConfigFile(

   string password,

   string passwordFormat

);

 

参数

password

要进行哈希运算的密码。

passwordFormat

要使用的哈希算法。选项有“sha1”或“md5”。

 

 

返回值

返回一个包含哈希密码的 String。

 

备注

支持的密码算法是 SHA1 和 MD5。

 

 

以下是测试的例子:

 

<%@ Page Language="C#" autoeventwireup="true" %>

<html>

       <head>

              <script runat="server">

         void Cancel_Click(object sender, EventArgs e)

         {

            userName.Text = "";

            password.Text = "";

            repeatPassword.Text = "";

            result.Text = "";

         }

   

         void HashPassword_Click(object sender, EventArgs e)

         {

            if (Page.IsValid)

            {

               string hashMethod = "";

               if (sha1.Checked)

               {

                  hashMethod = "SHA1";

               }

               else

               {

                  hashMethod = "MD5";

               }

   

               string hashedPassword =

                  FormsAuthentication.HashPasswordForStoringInConfigFile(password.Text, hashMethod);

   

               result.Text="&lt;credentials passwordFormat=\"" + hashMethod +"\"&gt;<br>" +

                  "&nbsp;&nbsp;&nbsp;&lt;user name=\"" + userName.Text + "\" password=\"" +

                  hashedPassword + "\"&gt;<br>" + "&lt;/credentials&gt;";

            }

            else

            {

               result.Text = "There was an error on the page.";

            }

         }

              </script>

       </head>

       <body>

              <form runat="server" ID="Form1">

                     <p>This form displays the results of the

                            FormsAuthentication.HashPasswordForStoringInConfigFile method.<br>

                            The user name and hashed password can be stored in a &lt;credentials&gt; node

                            in the Web.config file.</p>

                     <table>

                            <tbody>

                                   <tr>

                                          <td>New User Name:</td>

                                          <td><asp:TextBox id="userName" runat="server"></asp:TextBox></td>

                                          <td><asp:RequiredFieldValidator id="userNameRequiredValidator" runat="server" ErrorMessage="User name required"

                                                        ControlToValidate="userName"></asp:RequiredFieldValidator></td>

                                   </tr>

                                   <tr>

                                          <td>Password:

                                          </td>

                                          <td><asp:TextBox id="password" runat="server" TextMode="Password"></asp:TextBox></td>

                                          <td><asp:RequiredFieldValidator id="passwordRequiredValidator" runat="server" ErrorMessage="Password required" ControlToValidate="password"></asp:RequiredFieldValidator></td>

                                   </tr>

                                   <tr>

                                          <td>Repeat Password:

                                          </td>

                                          <td><asp:TextBox id="repeatPassword" runat="server" TextMode="Password"></asp:TextBox></td>

                                          <td><asp:CompareValidator id="passwordCompareValidator" runat="server" ErrorMessage="Password does not match"

                                                        ControlToValidate="repeatPassword" ControlToCompare="password"></asp:CompareValidator></td>

                                   </tr>

                                   <tr>

                                          <td>Hash function:

                                          </td>

                                          <td align="middle"><asp:RadioButton id="sha1" runat="server" GroupName="HashType" Text="SHA1"></asp:RadioButton>

                                                 <asp:RadioButton id="md5" runat="server" GroupName="HashType" Text="MD5"></asp:RadioButton></td>

                                   </tr>

                                   <tr>

                                          <td align="middle" colspan="2">

                                                 <asp:Button id="hashPassword" onclick="HashPassword_Click" runat="server" Text="Hash Password"></asp:Button>&nbsp;&nbsp;

                                                 <asp:Button id="cancel" onclick="Cancel_Click" runat="server" Text="Cancel" CausesValidation="false"></asp:Button></td>

                                   </tr>

                            </tbody>

                     </table>

                     <p><asp:Label id="result" runat="server"></asp:Label></p>

              </form>

       </body>

</html>

 

运行结果如下:

 

 

 

可以看到,可以产生SHA1码和MD5码。下面是有关这两种加密算法的相关信息:

 ----------------------------------------------------------------------------------------------

引文1:

200分关于 MD5加解密/希望大家以后不要再问了

ShiningstarHu (Shining_star)     2005-06-08 21:29:33 在 Web 开发 / ASP 提问


发这个帖子,实在是因为我在这CSDN里2年的时间里,看了太多的有关于这个方面的问题了。
再加上本人最近考试综合症以及下面这个帖子里面提问的也好,回答问题的也好让我看了很伤心。
http://community.csdn.net/Expert/topic/4065/4065846.xml?temp=.8402063

看来很多人对Hash算法还不是很理解。在这里,我简单的讲解一下。
我也不在希望以后再有人问关于MD5,SHA1如何解密了!

首先简单的讲一下Hash算法和他的通途!可能大家看了以后,很多人可能都会发现自己
目前在使用Hash算法的目的都是和Hash算法本身的设计目的不一样的   :D

Hash算法不管是MD5也好SHA1也好.   他们都是一种散列算法,其算法的特点是,可以把任意长度的字符串经过运算生成固定长度的字符串,并且这个产生的字符串代表着原来字符串里的所有字符。
简单的举个例子,就拿我上面说的那个帖子里面的   kc_ren(天堂龙)的例子:

admin   加密后:
16位8f00b204e9800998
32位d41d8cd98f00b204e9800998ecf8427e

其中不管是16位也好,32位也好其生成的字符串8f00b204e9800998   (16bit)或者d41d8cd98f00b204e9800998ecf8427e(32bit)他们表示着admin这个原始字符串.

只要admin这个字符串没有变,不管怎样重复使用MD5或者SHA1进行重新运算,其结果保持不变。

利用这个特点,在计算机安全学上,我们使用这种算法来保证数据完整性(Integrity)
这里提到计算机安全学,我在这里扩充一下:简单的概述计算机安全学,其实就是一门在讲关于   CIA
的学科。   C   =   Confidentiality   (机密性),   I   =   Integrity   (完整性),   A   =   Avalibility(可用性)

显而易见Hash算法,是用来保证   Integrity的算法。什么叫做完整性,不单单指数据不丢失,并且要保证数据没有被非法修改过。举个简单的例子。

比如:A   发了一个Email给B内容为"Hello",因为我们目前使用的以太网的特点,任何人在网络上都有可能截获这封Email,任何人都有可能,修改Hello这个字符串。那么当B收到这封A发来的Email的时候,怎么确定这封Email在传送过程中没有被修改过呢?   我们就使用了Hash算法来保证数据的完整性。他的工作方式是这样的:

1.A写一封Email内容为Hello
2.A用Hash算法对Hello进行编码(这里我用了编码,没有用加密这个词)
3.A将原始Email   Hello   以及经过Hash算法编码过后的digest(原始Email的摘要信息)一起发送给B
    (因此,A给B发的Email由2部分组成,1是原始的Hello,2是经过Hash编码的摘要信息)

4.B接收到了A的Email,首先分离由2部分组成的邮件。
5.B通过Hash算法,根据收到的Email的内容,重新计算出该Email的摘要信息.
6.B将自己计算出的摘要信息和收到的摘要信息进行比较,如果比较结果一样,则认为这封Email在中途没有被修改过,否则的话,这封Email在中途一定被修改过,因此内容不可信。

至此,保证了原始数据的完整性。
很多人在使用Hash算法在对密码进行所谓的加密,其实是不妥的。这样做的最终结果最多最多就是能够让使用的这个软件的人放心。放心什么呢?放心的就是他们在你的软件里面所保存的密码,开发软件的人不能获得。除此之外,没有其他任何价值。如果一定要说出其他的价值的话。也就是如果开发软件的人员或者维护该软件的人员不小心将含有客户密码数据的数据库泄密的话,得到这个数据库的人,无法从数据库中获得那些客户的密码。   但是,大家想想清楚,我都获得了数据库的数据,我还需要那些密码干什么呢?

我相信很多在CSDN的开发者,他们为了实现向客户承诺的所谓的   Pravicy,他们在开发Web   base应用的时候,使用了Hash算法。这样他们会对使用他们Webbase的应用的用户说:"你们在我这里的登陆密码是安全的,没有人能够知道。"   看上去好像想得很周到,其实,仔细想想,光光使用这种方法,如何保证用户的Pravicy呢?   说白了,就是形同虚设,光光使用Hash算法对用户的密码进行编码(所谓的加密)是没有什么很高的价值的。

谈了这么多,我相信大家应该理解Hash算法的用途了。现在我们来简单的谈一下,很多人很为之骄傲的山东大学王小云教授的关于什么MD5"解密"的新闻.(根据我刚刚看了山东大学的网页,据说她连SHA1,MD4都"解密"了).     请大家注意,我在解密上面放了引号!!

如果网上这么传,我只能说那些报道这则消息的新闻工作者的无知!(当然不能怪他们,因为他们不是计算机专业毕业的,而且报道的又是有关计算机安全学方面的东西。要知道在美国计算机安全学,是可以单独作为大学本科的一个专业的,里面有太多的东西需要学了。我现在讲得也只是皮毛而已。)

有点跑题了:P       ......

回过头,简单的讲一下王教授的碰撞法。   说到解密?王教授的方法不是用来解密的。所以传什么王教授可以解密MD5,将MD5的编码(所谓的加密)结果还原,这个是有点夸大了。没有这么传神的,那些说法用句时髦的话来描述叫做“传说中的解密”   :D

王教授的碰撞法是利用了MD5或者SHA1算法的一个漏洞(我暂且叫做漏洞吧,没有考证过)
根据MD5和SHA1这种Hash算法的特点,因为他们是任意长度的字符串变成固定长度的摘要信息。
那么这里就有可能发生一个问题,就是不同的字符串在理论上是有可能产生相同的摘要信息。

王教授所谓的碰撞法,碰撞的就是不同的字符串所产生的摘要信息是一样的那些字符串。因此得名碰撞法。   碰撞就是体现在这里。没有什么其它的传神的东西了。根据SHA1和MD5等Hash算法,在设计时候,设计这个算法的人认为不同的字符串要产生相同结果的摘要信息的可能性几乎为零。而王教授则证明了SHA1和MD5等Hash算法产生的摘要信息规则是可以在比较短时间内被破解的。这样一来,原始数据的   Integrity   就被打破了。   所谓的破解,也就是体现在这里。

如果大家还不明白,我再简单的用王教授的碰撞法给大家举个简单的例子。

还是拿我前面的例子,A给B写了个Email叫做Hello,然后通过王教授的碰撞法,可能得到Fuck这个字符串的摘要信息和Hello这个这个字符串产生的摘要信息是一样的。因此,在前面的这个例子中。如果B收到的Email内容为Fuck   B也将认为是A发来的Email,并且没有被修改过!

看到这里,我相信很多目前在使用MD5或者SHA1等Hash算法的人来保证密码安全的人来说,应该考虑一下,是否应该继续使用目前的方法来保证安全了。

 

 -----------------------------------------------------------------------------------------------------------------------------

下面是一些有关MD5,SHA1可以破解的文章,看了一下,并不是说MD5不是可逆的了,而是说MD5编码不再唯一了,也就是说两个不同的字符串可能产生相同的MD5编码。

 

http://topic.csdn.net/t/20040908/11/3351527.html


又问了一下别人,原来因为MD5 无论多长的字符串都产生相同长度的字符串,也就是总共有2的128次幂个字符串,而字符串的组合是无穷的,所以必然产生重复,我想王晓云教授不应该是发现了这个规律吧。可能是发现了更快的找到能够产生相同编码的两个字符串的方法吧。

如果是的话,就把细节公司出来吧,让我也看看到底是怎么回事 

 上网找了一下,竟然找到了王晓云教授的这篇论坛,原文如下

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 win8更新失败无法开机怎么办 安装英雄联盟文件损坏怎么办 电脑玩lol运行内存不足怎么办 守望先锋账号冻结了怎么办 守望先锋服务器发生意外错误怎么办 在先锋社保缺一年上学怎么办 lol更新后反应很慢怎么办 电脑跳舞毯不正常电脑游戏怎么办 PS中缺失的字体怎么办 黑板墙不想要了怎么办 淘宝代练打坏了怎么办 绝地求生与ipad不兼容怎么办 小米手机玩绝地求生卡怎么办 绝地求生服务器目前非常繁忙怎么办 玩绝地求生手机发烫怎么办 绝地求生刺激战场延迟高怎么办 怀孕八个半月打喷嚏头疼怎么办 20岁打喷嚏漏尿怎么办 鼻炎犯了不停打喷嚏怎么办 鼻炎犯了不停打喷嚏流鼻涕怎么办 感冒鼻痒怎么办小窍门 腰扭了屁股也疼怎么办 小三把房子过户怎么办 小三把房子卖了怎么办 打印机ip地址变了怎么办 电脑ip地址错误不能上网怎么办 修改了注册表电脑无法启动怎么办 香水喷到衣服上有印怎么办 家里一股猫的味道怎么办 干菊花里面有虫怎么办 安装时显示程序已关闭怎么办 电脑一直重启开不了机怎么办 应用安装在sd卡打不开怎么办 安装ps打不开安装包怎么办 安装好的软件打不开怎么办? win10系统语言修改不了怎么办 一个月婴儿吵夜怎么办 玩游戏一直闪退怎么办 钱站一直闪退怎么办 win7重装连不上网怎么办 笔记本屏幕横过来了怎么办