3

任何人都可以帮助解决我遇到的一些问题。我正在尝试创建一种自制的身份验证方法,我陷入了一些领域,并希望有人能提供帮助。我想问的第一件事是如何解决我在代码中评论的问题:

    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 
    }
4

1 回答 1

6

“不能像方法一样使用”可能是因为您添加了括号:result.Password()如果它是一个属性,请删除括号result.Password。添加括号会使编译器尝试将其编译为方法调用,而实际上它是一个属性或字段。

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

对于你的后半部分问题,我无法提供任何建议。

更新

您应该找到一个调用SequenceEqualon的方法byte[]。这是一个 Linq 扩展方法,因此您可能需要添加:

using System.Linq;

到文件的顶部。

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

于 2012-04-24T09:04:52.383 回答