我正在创建一个连接到Web服务的移动应用程序。它需要使用密码登录到系统。密码存储服务器的MD5哈希密码使用这种方法散列上:如何使用PCLCrypto中的现有密钥来散列密码?
Byte[] Initial = <Key goes here>
MD5CryptoServiceProvider Provider = new MD5CryptoServiceProvider();
List<Byte> Encoding = new List<Byte>(Initial);
Encoding.AddRange(ASCIIEncoding.ASCII.GetBytes(inputString));
return Convert.ToBase64String(Provider.ComputeHash(Encoding.ToArray()));
的钥匙和密码哈希的Web应用程序的密码不能在我Xamarin PCL项目中使用,因为这是不可能的在Xamarin PCL中使用'MD5CryptoServiceProvider'。
我需要在xamarin应用程序中创建一个等同的方法来对密码进行散列处理,然后再与Web服务版本进行比较。
要做到这一点,我选择了PCLCrypto,但我似乎无法找到任何地方包含原来用于加密密码的密钥。
这是Xamarin代码:
Byte[] Initial = <the same key as was used to originally cache it>
// step 1, calculate MD5 hash from input
var hasher = WinRTCrypto.HashAlgorithmProvider.OpenAlgorithm(HashAlgorithm.Md5);
byte[] inputBytes = Encoding.UTF8.GetBytes(inputString);
byte[] hash = hasher.HashData(inputBytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
{
sb.Append(hash[i].ToString("X2"));
}
return sb.ToString();
在此先感谢您的帮助。
为什么不直接使用Base64类的android?在这种情况下,你必须为每个平台实现它,但你不会头痛..只是一个建议.. –
因为这是一个PCL项目。 – connersz
好的..我们正在谈论xamarin表单项目的权利? 在每一个。平台创建 comparepasswords(userpwd,hashedpwd) {// 哈希userpwd和比较 //返回true或false } 使用扶养服务调用函数.. 因此,您将能够使用base64类。 –