Как использовать сгенерированную строку RNGCryptoServiceProvider в строке URL / запроса

ПРИМЕЧАНИЕ: я уже решил проблему, упомянутую в этом посте. После долгих поисков Google я не смог найти правильного решения. Как теперь я знаю ответ. Я думал, что этот пост сэкономит время других разработчиков, пытаясь решить то же самое.

Проблема:

Я хотел создать случайную криптографическую строку и отправить ее как часть URL пользователю. Со строкой Base64 вы, скорее всего, получите ошибку:

Модуль фильтрации запросов настроен на отклонение запроса, который содержит двойную escape-последовательность

или он не найдет ваш маршрут.

Поэтому вы можете взломать / обойти и найти / заменить escape-символы на Base64 String или использовать это решение.

Вот так выглядит мой оригинальный код.

  public string GenerateRandomString()
  {
     var randomBytes = GenerateRandomBytes(512);

     var randomString = Convert.ToBase64String(randomBytes);

     return randomString;
  }

  private byte[] GenerateRandomBytes(int keyBitLength)
  {
     using (var provider = new RNGCryptoServiceProvider())
     {
        var lengthInByte = keyBitLength / 8;
        var randomNumber = new byte[lengthInByte];
        provider.GetBytes(randomNumber);

        return randomNumber;
     }
  }

Решением является UrlTokenEncode. Добавлен новый метод для преобразования случайных байтов в Url Encoded Token.

public string GenerateRandomStringToken()
{
    var randomBytes = GenerateRandomBytes(512);
    return HttpServerUtility.UrlTokenEncode(randomBytes);
}

private byte[] GenerateRandomBytes(int keyBitLength)
{
   using (var provider = new RNGCryptoServiceProvider())
   {
      var lengthInByte = keyBitLength / 8;
      var randomNumber = new byte[lengthInByte];
      provider.GetBytes(randomNumber);

      return randomNumber;
   }
}

1 ответ

Решение

В вышеуказанном вопросе решение также предоставляется.

Другие вопросы по тегам