[英]Comparing a hashed string in xml
我正在尝试一个带有登录屏幕的小项目,当用户创建登录详细信息并将其存储在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"
不知道这是应该的样子还是我的代码出错。 我觉得这是问题所在,因为我已仔细检查过,比较结果应返回正确。
result.Value
看起来像是Value
: 获取或设置此元素的串联文本内容。
您应该最终得到正确的user
元素,其中result.Element("Username")
是Tom
。
XML中的密码似乎需要某种方式进行编码,而Encoding.Default.GetString(hPass)
不会以该格式返回字符串...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.