Как указать алгоритм ha sh в Xamarin? - PullRequest
0 голосов
/ 13 июля 2020

Запрограммировано в Visual Studio 2019 на Windows 10. Процесс кодирования RF C 2898 из проекта. NET Framowork 4.7.2. в Xamarin.Form (. NET Standard 2.0). Исходная обработка выглядит следующим образом:

var salt = "abcdefg";
var passWord = "password";
var iterations = 5;
var saltbyte = System.Text.Encoding.UTF8. GetBytes(salt);
var Rfc2898 = new System.Security.Cryptography. Rfc2898DeriveBytes(passWord, saltbyte, iterations, System.Security.Cryptography. HashAlgorithmName.SHA256);

Перенос приведет к ошибке в Xamarin, потому что вы не можете указать алгоритм ha sh. Вы не можете указать алгоритм ha sh.

var Rfc2898 = new System.Security.Cryptography. Rfc2898DeriveBytes(passWord, saltbyte, iterations);

Как мне указать алгоритм ha sh в Xamarin?

Переведено с www.DeepL.com/Translator (бесплатная версия)

1 Ответ

0 голосов
/ 13 июля 2020

Похоже. 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 - это способ слишком мало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...