任何人都可以解决我遇到的一些问题。我正在尝试创建一个自制的身份验证方法,我坚持在一些领域,并希望有人可以帮助。我想问的第一件事是如何解决我在代码中评论过的问题:
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
}
答案 0 :(得分:3)
“不能像方法一样使用”很可能是因为你添加了括号:result.Password()
如果是属性,则删除括号result.Password
。添加括号使编译器尝试将其编译为方法调用,而实际上它是属性或字段。
第二个错误是您正在尝试返回students
,这是一个学生列表。该方法需要string
作为返回值。您的意思是return result.StudentID;
吗?例外是详细说明了从List<Student>
到string
编译演员的失败尝试。
我不能就你的问题的后半部分提出任何建议。
<强>更新强>
您需要在SequenceEqual
上找到名为byte[]
的方法。这是Linq扩展方法,因此您可能需要添加:
using System.Linq;
到文件的顶部。
尝试将字符串传递给此方法时,您可能会收到错误:SequenceEqual(result.Password);
。