我正在创建一个连接到Web服务的移动应用程序。它需要使用密码登录系统。密码作为使用此方法进行哈希处理的MD5哈希密码存储在服务器上:
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()));
在我的Xamarin PCL项目中无法使用在Web应用程序上散列密码的密钥和代码,因为无法在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();
提前感谢您的帮助。
答案 0 :(得分:0)
我有一个解决方案,但我使用平板特定代码。 在xamarin.forms部分中,您实现了一个接口,例如:
public interface SpecificCodes
{
Boolean comparePasswords(String userPassword,String DBPassword);
}
在xamarin.android中,您创建了一个实现接口
的类[assembly:Dependency(typeof(MyProject.Droid.Code.SpecificPartsAndroid))]
namespace MyProject.Droid.Code
{
...
public class SpecificPartsAndroid: SpecificCodes
{
public Boolean comparePasswords(String userPassword, String DBPassword)
{
byte[] dig = hash(new Java.Lang.String(userPassword).GetBytes("UTF-8"),"MD5");
byte[] res=Base64.Decode(DBPassword,Base64Flags.Default);
return String.Compare(dig.ToString(),res.ToString())==0?true:false;
}
private static byte[] hash (byte[] toHash, String algorithm)
{
MessageDigest md = MessageDigest.GetInstance(algorithm);
return md.Digest(toHash);
}
}
}
在xamarin.ios中也这样做 然后调用你的函数使用Xamarin.forms中的代码
DependencyService.Get<SpecificCodes>().comparePasswords(pwdUser, pwdHashed);
希望有所帮助
答案 1 :(得分:-1)
仅仅使用哈希函数是不够的,只添加一个盐对提高安全性几乎没有作用。相反,使用随机盐在HMAC上进行大约100毫秒的持续时间并使用哈希值保存盐。使用PBKDF2,password_hash,Bcrypt等功能。重点是让攻击者花费大量时间通过暴力破解密码。
保护您的用户非常重要,请使用安全密码方法。
请参阅Security Stackexchange上的How to securely hash passwords, The Theory。
请参阅OWASP(开放式Web应用程序安全项目)Password Storage Cheat Sheet。
请参阅Modern, Secure, Salted Password Hashing Made Simple
请参阅Jim Fenton的Toward Better Password Requirements: