RNGCryptoServiceProvider случайная строка. всегда возвращает строку, которая заканчивается на «=» - PullRequest
0 голосов
/ 31 августа 2018
static public string GetRandomSalt(int saltLength)
    {
        byte[] saltByte = new byte[saltLength];

        using (var random = new RNGCryptoServiceProvider())
        {

            random.GetBytes(saltByte);
        }
        return Convert.ToBase64String(saltByte);
    }

так что если длина соли равна 8, она вернет некоторую случайную строку, но оканчивается на '=', как мне избежать этого? посмотрел на другое решение по переполнению стека, но все еще не могу это исправить

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Проблема не в использовании RNGCryptoServiceProvider, а в том, что вы конвертируете результат в base-64.

Согласно документации :

Бесполезный символ "=" используется для конечного заполнения.

Итак, я могу придумать три варианта:

  1. Прекратите использовать форматирование base-64 (возможно, верните сами байты).
  2. Примите тот факт, что base-64 использует = для заполнения.
  3. Передайте длину, которая не требует заполнения, например 9.

Пример для пункта 3:

Convert.ToBase64String(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9})

производит

AQIDBAUGBwgJ
0 голосов
/ 31 августа 2018

Это просто заполнение Base64, которое вы не можете избежать, см. здесь . См. Также Спецификация Base64 .

Я рекомендую использовать соль в качестве байтового массива.

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