我用VS2005的注册导航控件制作用户注册,修改web.config密码加密的方式为MD5,如下:
<membership defaultProvider="AspNetSqlMembershipProvider" hashAlgorithmType="MD5">
<providers>
<remove name="AspNetSqlMembershipProvider" />
<add connectionStringName="LocalSqlServer" enablePasswordRetrieval="false"
enablePasswordReset="true" requiresQuestionAndAnswer="true"
applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed"
maxInvalidPasswordAttempts="5" minRequiredPasswordLength="3"
minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
passwordStrengthRegularExpression="" name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</membership>执行后密码为“jiawen”加密后的密码为“Qw/Lgb6Xp+y1uxeckjBB7eWMV84=”,而我用asp进行MD5加密的密码为“72502d29fd8ff22b”,不一样,什么原因?
<membership defaultProvider="AspNetSqlMembershipProvider" hashAlgorithmType="MD5">
<providers>
<remove name="AspNetSqlMembershipProvider" />
<add connectionStringName="LocalSqlServer" enablePasswordRetrieval="false"
enablePasswordReset="true" requiresQuestionAndAnswer="true"
applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed"
maxInvalidPasswordAttempts="5" minRequiredPasswordLength="3"
minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
passwordStrengthRegularExpression="" name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</membership>执行后密码为“jiawen”加密后的密码为“Qw/Lgb6Xp+y1uxeckjBB7eWMV84=”,而我用asp进行MD5加密的密码为“72502d29fd8ff22b”,不一样,什么原因?
解决方案 »
- datagrid 问题,后台设置列宽
- 我这个存储过程哪里有问题哇? 返回不了数据挖
- 【分享】国外一些知名ASP.Net开源CMS系统
- 关于网页
- 求高手指点 ASP.NET ----ListBox控件问题??
- 求思路,打开新页面上传图片,然后把图片地址传回来
- 我想定义一个自定义链接列,其中传两个参数一个绑定的数据字段,一个是在cs.里的变量name??
- 急/特急!
- TreeView中的NavigateUrl如何调用函数
- 如何禁止FCKeditor的上传,新建目录的功能??
- 如何得到用户控件中DropDownList的值,在另一个页面
- asp.net+mapxtreme的一个很普通的问题,一解决就给分
可以用Frombase64String再取回
先检查你设置的是用什么方式加密,相应的参数是passwordFormat:
Clear:密码未加密。
Encrypted:密码使用由 machineKey 元素(ASP.NET 设置架构) 元素配置确定的加密设置进行加密。
Hashed:默认的,密码使用 SHA1 哈希算法进行单向加密。可以使用 hashAlgorithmType 属性指定与 SHA1 算法不同的哈希算法,比如MD5。
一般常用的是Hashed加密。
下面我就说一下Hashed加密的过程:
在注册的时候,注册向导会随机生成一个称为Salt的字符串。
先看一下你的数据库里的aspnet_Membership表,里面有这样三个字段:password,passwordFormat,passwordSalt。
password是加密后的密码。passwordFormat是你在web.config里设置的加密方式的值,这个值是整数了。为什么?呵呵,因为passwordFormat是枚举类型啊。Hashed对应的值是1。那Salt做什么用呢?
向导接下来的操作是这样的:
byte[] src = Encoding.Unicode.GetBytes(password);
byte[] buffer2 = Convert.FromBase64String(salt);
byte[] dst = new byte[buffer2.Length + src.Length];
byte[] inArray = null;
Buffer.BlockCopy(buffer2, 0, dst, 0, buffer2.Length);
Buffer.BlockCopy(src, 0, dst, buffer2.Length, src.Length);
HashAlgorithm algorithm = HashAlgorithm.Create(Membership.HashAlgorithmType);
这个Membership.HashAlgorithmType是.net里的一个私有属性,也就是上面你在web.config里设置的值。这个你是没法用的了。不过可以用字符串常量代替。
nArray = algorithm.ComputeHash(dst);
string ep=Convert.ToBase64String(inArray);
这个ep就是存储在数据库password字段里的值了。这也就是为什么同是用MD5加密,内容却不一样的原因了。
不知你看清楚了没有。