Похоже. NET Стандарт 2.0 не предоставляет конструктору аргумент HashAlgorithmName
. Однако он присутствует в. NET Standard 2.1. Вы можете легко изменить свою библиотеку для использования. NET Standard 2.1.
В противном случае вам придется делать эту платформу специально. Xamarin. iOS и Xamarin. Android действительно имеют конструктор.
Итак, я бы создал службу для sh ваших паролей:
public interface IPasswordHasher
{
byte[] GetHashedPassword(string password, string salt, int keySize);
}
Затем реализуйте это на как Android, так и iOS и зарегистрируйте его как Xamarin.Forms DependencyService instance:
using System.Security.Cryptography;
using System.Text.Encoding;
using Xamarin.Forms;
[assembly: Dependency(typeof(MyAwesomeProject.iOS.Services.PasswordHasher))]
namespace MyAwesomeProject.iOS.Services
{
public class PasswordHasher : IPasswordHasher
{
public byte[] GetHashedPassword(string password, string salt, int keySize)
{
var saltbyte = UTF8.GetBytes(salt);
var rfc2898 = new Rfc2898DeriveBytes(password, saltbyte, 1000, HashAlgorithmName.SHA256);
return rfc2898.GetBytes(keySize);
}
}
}
Затем, когда вам нужно использовать его как:
var bytes = DependencyService.Get<IDeviceOrientationService>().GetHashedPassword("password", "abcdefg", 20);
Я настоятельно рекомендую вам использовать более 5 итераций для создания ключа PBKDF2. По умолчанию 1000, чем выше, тем лучше. Конечно, на мобильных устройствах вы можете столкнуться с ограничением производительности, но 5 - это способ слишком мало.