Шифрование с использованием шифрования в MVC Asp.net только по Id - PullRequest
0 голосов
/ 12 ноября 2018

Я следовал примеру онлайн для этого, однако кажется, что многие из этих статей не дают вам всего, что вам нужно.Я не уверен, почему люди публикуют статьи, которые являются частичными.Пользовательский письменный код, вы почти никогда не найдете ответа на то, что предполагалось.Как новичок это делает его трудным для изучения и понимания.На этом сайте тоже не было, кстати.Итак, у меня есть 4 класса Crypto, CryptoValueProvider, CryptoValueProviderAttributes и CryptoValueProviderFactory.И зарегистрировали правильный код в Global.asax.Пустая область находится в классе Crypto.Я хотел бы изменить www.somewebsite.com/users/edit/5 на www.somewebsite.com/users/edit/ndvnq;owirwghbqasldkhgf.Когда администратор компании меняет или редактирует там информацию, я хотел бы, чтобы она была зашифрована, чтобы они не могли просто изменить 5 на 10 и увидеть чужую информацию.Это решение выглядит очень хорошо, поскольку не нужно размещать много кода на нескольких страницах.Ниже приведен код, который у меня есть:

Использование:

[CryptoValueProvider] // This is apparently all you have to do for this to work
public ActionResult UserEdit(int id)
{
  return View();
}

Крипто-класс - Где моя проблема - Нужны примеры того, что должно идти сюда

    public static class Crypto
    {
      public static string Encrypt(Dictionary<string, string> keyValue)
      {
        // encrypt query string key value pair

      }

      public static Dictionary<string, string> Decrypt(string encryptedText)
      {
        // decrypt encrypted query string into key value pair
      }
    }

CryptoValueProvider:

    public class CryptoValueProvider : IValueProvider
{
    RouteData routeData = null;
    Dictionary<string, string> dictionary = null;

    public CryptoValueProvider(RouteData routeData)
    {
        this.routeData = routeData;
    }

    public bool ContainsPrefix(string prefix)
    {
        if (this.routeData.Values["id"] == null)
        {
            return false;
        }

        this.dictionary = Crypto.Decrypt(this.routeData.Values["id"].ToString());

        return this.dictionary.ContainsKey(prefix.ToUpper());
    }

    public ValueProviderResult GetValue(string key)
    {
        ValueProviderResult result;
        result = new ValueProviderResult(this.dictionary[key.ToUpper()],
            this.dictionary[key.ToUpper()], CultureInfo.CurrentCulture);
        return result;
    }
}

CryptoValueProviderAttributes:

    public class CryptoValueProviderAttribute : FilterAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationContext filterContext)
    {
        filterContext.Controller.ValueProvider = new CryptoValueProvider(filterContext.RouteData);
    }
}

CryptoValueProviderFactory:

    public class CryptoValueProviderFactory : ValueProviderFactory
{
    public override IValueProvider GetValueProvider(ControllerContext controllerContext)
    {
        return new CryptoValueProvider();
    }
}

Global.asax:

    protected void Application_Start()
    {
        ValueProviderFactories.Factories.Insert(0, new CryptoValueProviderFactory());
    }

Благодарим Вас за помощь... Это высоко ценится.

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