2011-12-29 31 views

回答

0

是,

只需在用户数据存储区中执行查找即可。

例如。

public static string IsUserValid(string username, string password) 
{ 
    if(!String.IsNullOrEmpty(username) && !String.IsNullOrEmpty(password)) 
    { 

     var allIsGood = true; 
     // query user datastore for username and password 
     // change allIsGood to true or false based on result 

     return allIsGood; 
    } 

    return false; 
} 

编辑:

因为我使用的加密密码和MD5哈希值。所以这个辅助类可能会有所帮助

#region Usings 

using System.Security.Cryptography; 
using System.Text; 

#endregion 

namespace Shared.Tools 
{ 
public static class Crypto 
{ 
    public static string CalculateMd5Hash(string input) 
    { 
     // step 1, calculate MD5 hash from input 
     var md5 = System.Security.Cryptography.MD5.Create(); 
     var inputBytes = Encoding.ASCII.GetBytes(input); 
     var hash = md5.ComputeHash(inputBytes); 

     // step 2, convert byte array to hex string 
     var sb = new StringBuilder(); 
     for (var i = 0; i < hash.Length; i++) 
     { 
      sb.Append(hash[i].ToString("x2")); 
     } 
     return sb.ToString(); 
    } 

    public static string GetHashValue(this MD5 hash, string value) 
    { 
     return GetHashValue(hash, Encoding.UTF8.GetBytes(value)); 
    } 

    public static string GetHashValue(this MD5 hash, byte[] value) 
    { 
     var data = hash.ComputeHash(value); 
     var md5 = ""; 
     for (var i = 0; i < data.Length; i++) 
     { 
      md5 += data[i].ToString("x2").ToLowerInvariant(); 
     } 

     return md5; 
    } 

    public static string MD5(this string value) 
    { 
     var algorithm = 
      System.Security.Cryptography.MD5.Create(); 

     var data = Encoding.ASCII.GetBytes(value); 
     data = algorithm.ComputeHash(data); 
     var md5 = ""; 
     for (var i = 0; i < data.Length; i++) 
     { 
      md5 += data[i].ToString("x2").ToLower(); 
     } 

     return md5; 
    } 
} 
} 

public static string IsUserValid(string username, string password) 
{ 
    // using Linq to Entities/Sql 
    return YourDataContext 
      .Users 
      .Where(u => u.UserName == username 
        && u.Password == password.MD5) 
      .FirstOrDefault() != null; 
} 

我还没有编译或测试这一点,你可能会为你的测试方法做这样的事情,但它应该给你的你要点在之后。

+0

但密码存储为加密,并且aspnet-membership正在处理所有这些。你知道我应该使用什么特定的存储过程吗? – TPR 2011-12-29 02:20:27

+0

是的加密通常是一个MD5哈希。请参阅我的编辑 – Peter 2011-12-30 23:53:47

+1

MD5是非托管资源,应予以处置。 – usr 2011-12-31 22:26:14

相关问题