Вопрос

Я искал по всему Google и не могу найти пример кода использования Scrypt (для хеширования пароля), используя Криптшарп библиотека.

Можете ли вы предоставить образец хеширования пароля?

Это было полезно?

Решение

Это только один звонок поэтому я расскажу вам о параметрах:

  1. key:это ваш пароль, используйте кодировку UTF-8 (без знака порядка байтов), чтобы закодировать пароль в массив байтов;
  2. salt:строка безопасных случайных байтов, хранящаяся вместе с результатом функции scrypt, 16 байт должно быть достаточно;
  3. cost:предлагаемый номер — 262144, но вы можете увеличить это значение, если ваш сервер сможет справиться с дополнительной нагрузкой;
  4. blockSize:смотрите стоимость, данное предложение 8;
  5. parallel:Я бы оставил это значение равным 1, если вы не хотите экспериментировать с многопоточностью;
  6. maxThreads:в общем null подойдет;
  7. derivedKeyLength:ну, это зависит от того, для паролей 128 должно быть достаточно, маловероятно, что ваш пароль имеет более 128 бит безопасности.

Вам следует сохранить хотя бы соль и результат.Возможно, вы захотите использовать кодировку Base 64, если хотите хранить их в виде строк.

Я бы порекомендовал вам сохранить еще один фрагмент данных:версия вашей схемы создания ключей на основе пароля (PBKDF).Скажем, установите его на 1 для использования сценария, с использованием заданной кодировки ключа, размера соли, стоимости, размера блока и т. д.В этом случае вы можете обновить свою схему позже (для этого вам нужно, чтобы пользователь предоставил свой пароль, поэтому вам придется сделать это онлайн, так что в конечном итоге у вас будет работать несколько схем одновременно).

Обратите внимание, что вы можете объединить вызовы функций PBKDF, чтобы вы могли использовать исходный вывод PBKDF и использовать его в качестве входных данных для следующего PBKDF.В этом случае пользователю не нужно вводить пароль (эта подсказка была взята из CodesInChaos по другому вопросу).

Другие советы

@maartebbodewes предоставляет отличный ответ с очень мудрыми дополнительными советами.Вот образец кода с его рекомендациями.Я бы также предложил прочитать « Ваш пароль слишком чертовски короткий 'Это показывает важность использования современной криптографии, как (на момент написания) BCRYPT или Scrypt .

public string Hash(string secret, string salt)
{
    var keyBytes = Encoding.UTF8.GetBytes(secret);
    var saltBytes = Encoding.UTF8.GetBytes(salt);
    var cost = 262144;
    var blockSize = 8;
    var parallel = 1;
    var maxThreads = (int?)null;
    var derivedKeyLength = 128;

    var bytes = SCrypt.ComputeDerivedKey(keyBytes, saltBytes, cost, blockSize, parallel, maxThreads, derivedKeyLength);
    return Convert.ToBase64String(bytes);
}
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top