2012-04-24 31 views
1

任何人都可以帮助我解决一些问题。我正在尝试创建一个自制的身份验证方法,我只是在几个方面陷入困境,并希望有人能够提供帮助。我想问的第一件事是如何解决我在代码注释的问题:byte []不包含SequenceEqual认证方法的定义

public string Authentication(string studentID, string password) 
    { 
     var result = students.FirstOrDefault(n => n.StudentID == studentID); 
     //find the StudentID that matches the string studentID 
     if (result != null) 
     //if result matches then do this 
     { 
      //---------------------------------------------------------------------------- 
      byte[] passwordHash = Hash(password, result.Salt); 
      string HashedPassword = Convert.ToBase64String(passwordHash); 
      //---------------------------------------------------------------------------- 
      // take the specific students salt and generate hash/salt for string password (same way student.Passowrd was created) 

      System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); 
      byte[] UserPassword = enc.GetBytes(HashedPassword); 
      UserPassword.SequenceEqual(result.Password); // byte[] does not contain a definition for SequenceEqual? 
      //check if the HashedPassword (string password) matches the stored student.Password 
     } 
     return result.StudentID; 
     //if string password(HashedPassword) matches stored hash(student.Passowrd) return student list 


     //else return a message saying login failed 
    } 

回答

2

“不能等的方法可以使用”可能是因为您添加括号:result.Password(),如果它是一个属性掉落括号result.Password。添加括号使得编译器试图将它编译为方法调用,而实际上它是一个属性或字段。

第二个错误是你试图返回students,这是一个学生列表。该方法需要string作为返回值。你的意思是改为return result.StudentID;?这是一个例外,详细说明了在编制演员时从List<Student>string的失败尝试。

我无法就您的问题的后半部分提供任何建议。

更新

我们希望你找到一个方法上byte[]SequenceEqual。这是一个LINQ扩展方法,所以你可能需要添加:

using System.Linq;

到文件的顶部。

然后,您可能会尝试将字符串传递给此方法:SequenceEqual(result.Password);

+0

AHHH宾果上返回result.StudentID解决了,如果我删除括号tho整行是错误的 – 2012-04-24 09:07:56

+0

它说byte []不包含序列相等?下半场我可能会弄清楚,如果我得到了第一点的工作。只是想展示我的想法。 – 2012-04-24 09:10:06

+0

@JungleBoogie听起来像是下一个错误。我无法帮助。用示范问题的示例创建一个新问题。 – 2012-04-24 09:10:52

相关问题