我用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”,不一样,什么原因?

解决方案 »

  1.   

    因为这个密码是用Convert.Tobase64String后得到的
    可以用Frombase64String再取回
      

  2.   

    jiawen 32位MD5 得 6280937372502D29FD8FF22BDB00136AMD5以后怎么可能会有/+=这些东西...
      

  3.   

    Membership对密码的处理过程是这样的:
    先检查你设置的是用什么方式加密,相应的参数是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加密,内容却不一样的原因了。
    不知你看清楚了没有。
      

  4.   

    .NET 2.0里有专门的加密MD5和SHA1函数的..你这个是64位转换不对的..而且麻烦MD5很简单,只有一句话..
      

  5.   

    ASP中你用的是16位的.那你在.NET加密后要取第8到25位..ASP.NET默认是32位..