注册用户时,用户密码要加密,然后插入到数据库,登陆的时候在解密,大家有没有什么好的代码啊
能给出源代码最好,
很急,谢谢拉
[此贴子已经被作者于2006-9-22 18:30:43编辑过]
一下代码不知对不对,您可以去看看
<%@ 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="<credentials passwordFormat=\"" + hashMethod +"\"><br>" +
" <user name=\"" + userName.Text + "\" password=\"" +
hashedPassword + "\"><br>" + "</credentials>";
}
else
{
result.Text = "There was an error on the page.";
}
}
</script>
</head>
<body>
<form runat="server">
<p>This form displays the results of the FormsAuthentication.HashPasswordForStoringInConfigFile
method.<br>The user name and hashed password can be stored in a <credentials> 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>
<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>
1、我在网络上搜索过所谓Md5等杂凑函数的破解,其中比较正式的是说某大学教授破解了MD5等相关杂凑函数的新闻,但是要搜索得到这种基于数学理论的论文还比较难找,真实性也待考证。另外有些网站推出的所谓破解,实际上仍然是花费存储成本穷举破解,其基本原理是将已知的一些简单字符串数字的组合所对应的MD5散列值的对应关系存入数据库中接受查询。这种本质上和穷举法类似的方法,并不代表对MD5的破解。
2、所谓杂凑函数的破解,在密码学上指能通过非穷举方法得到结果为该杂凑函数的一个原文,该原文和计算杂凑函数的原文不一定是一样的,但是它们可以算得同样的杂凑函数。这样可以用这个原文冒充最先那个原文而获得通过。不同的原文计算出相同的杂凑函数是可能的,但是从相同的杂凑函数获得原文是困难的,这是杂凑函数用于数字签名的基本原理。而网络上的破解,没有提到该理论。
3、很多加密时自己写的,从密码学角度不建议这样做。对信息加密和破解是相互的,一个优秀的加密算法能够经受得住时间的考验,认为一个加密算法安全现在流行的几种原则如下:加密算法公开,不要把密文的安全性寄托在加密算法的保密上,也许你自己写的加密算法,在攻击者不知道该算法之前是安全的,但是没有经过广大破解的安全论证,在密码学历史上有很多声称牢不可破或者安全及高的加密算法都经不住大众破解的考验。
4、网络上穷举破解MD5加密,按照其说法是:包含全部5个字符以下的数据,大部分6个字符等等数据,数据库条目约230多亿条。这种破解法正好是利用了短密钥的弱点。大多数公众为了达到密码方便记忆,丝毫不考虑密码长度、区分大小写、试用一些不易猜测的乱字符等。很多大众还在使用类似家庭电话、出生年月之类的值作为密钥。这是密钥上的安全隐患,并非该加密函数本身的存在破解因素。假如你的密码长度再增加一个字符,他的230多亿数据库又得再增大40多倍才能容纳这么庞大的数据。所以要提示大家在创建密码时,使用集中密码学家建议的密码组成方法,这种破解法将受到密钥长度的极大限制。
5、关于MD5和SHA1等杂凑函数一般用于数字签名。利用其单向性原理来加密密钥是可行的。因为不需要保持密钥的全部信息,只要保证其签名正确。重要的是告诉用户怎么去构造一种安全的密钥。
综上,罗列几条:使用国家标准或推荐的加密算法,构造一定长度不一猜测的密钥。这是抗击此种破解的最好方法。