背景
我正在使用
Microsoft.AspNet.Identity;
MVC网站中的框架。我在网站上实现了密码检索,电子邮件确认等所有标准功能。
我的问题
我想在Xamarin c#中创建一个非常基本的应用程序,但我希望它使用我在我的网站上设置的数据库,当然 - 包括验证密码。
根据我的想法,它应该是这样的:
我无法使用
Microsoft.AspNet.Identity;
在我的Xamarin App上。
问题
如何重新创建Asp.Identity使用的哈希,以便验证密码?
如果情况是我必须使用原始密码使用WCF(这样安全吗?)并对服务本身进行散列 - 我是否可以使用Identity框架?如果没有,那么我仍然有创建/验证哈希的问题。
另外,如果我对这些哈希函数有所了解,请随时教我:)
额外信息
我尝试过的散列函数给出了与Identity框架完全不同的散列 - 在我的测试中,我发现创建具有完全相同密码的用户会产生不同的散列。 (由于使用盐?)
答案 0 :(得分:1)
好的,我找到了解决方案
为有类似问题的人发布
我决定使用原始密码和用户名来使用WCF,只需使用该功能验证上述答案提供的内容。
修改强>
只是为了澄清它是用来验证密码的这段代码(取自上面的链接):
public static bool VerifyHashedPassword(string hashedPassword, string password)
{
byte[] buffer4;
if (hashedPassword == null)
{
return false;
}
if (password == null)
{
throw new ArgumentNullException("password");
}
byte[] src = Convert.FromBase64String(hashedPassword);
if ((src.Length != 0x31) || (src[0] != 0))
{
return false;
}
byte[] dst = new byte[0x10];
Buffer.BlockCopy(src, 1, dst, 0, 0x10);
byte[] buffer3 = new byte[0x20];
Buffer.BlockCopy(src, 0x11, buffer3, 0, 0x20);
using (Rfc2898DeriveBytes bytes = new Rfc2898DeriveBytes(password, dst, 0x3e8))
{
buffer4 = bytes.GetBytes(0x20);
}
return ByteArraysEqual(buffer3, buffer4);
}