我正在尝试一个带有登录屏幕的小项目,当用户创建登录详细信息时会将密码哈希,并将其存储在XML文件中。当用户登录时,它会哈希最近输入的密码,并将其与匹配用户名下面的密码进行比较。
我面临的问题是我相信它以某种方式将用户名添加到密码并进行比较。我设置断点并确认哈希值完全相同。我的XML文件的一个例子:
<Users>
<User>
<Username>Tom</Username>
<Password>1981188637181704932922387266155158141224105130616330512161251851292213221146244100</Password>
</User>
</Users>
这是我登录时的代码:
private bool GetUser(string username, string password, string path)
{
XDocument doc = new XDocument();
byte[] bytes = Encoding.UTF8.GetBytes(password);
SHA256Managed sha256 = new SHA256Managed();
byte[] hPass = sha256.ComputeHash(bytes);
password = string.Empty;
var result = (from item in
XDocument.Load("users.xml").Descendants("User")
where item.Element("Username").Value == username &&
item.Element("Password").Value == Encoding.Default.GetString(hPass)
select item).FirstOrDefault();
if (result != null)
{
return true;
}
else
{
return false;
}
如果我要看看我拉的价值,请阅读
"Tom1981188637181704932922387266155158141224105130616330512161251851292213221146244100"
不确定这是否应该是我应该查看的方式,或者我是否在代码中出错。我觉得这是问题,因为我已经仔细检查过,比较应该正确。
答案 0 :(得分:1)
result.Value
看起来像Value
:获取或设置此元素的连接文本内容。
您最终应该使用user
为result.Element("Username")
的正确Tom
元素。
XML中的密码看起来是如何编码的,而Encoding.Default.GetString(hPass)
不会以该格式返回字符串......