Наш пользователь получает электронные письма с подготовленной гиперссылкой.

У этой гиперссылки есть параметр.

Когда пользователь нажимает гиперссылку, мне нужно убедиться, что пользователь не вмешался в параметр.

Параметр - простое целое число.

  • Я хочу создать хеш из целого числа.
  • Я хочу подписать хеш.

Какие текущие классы .NET мне следует использовать для этой задачи?

0
Pascal 7 Янв 2016 в 01:13

2 ответа

Лучший ответ

Самый простой способ сделать это - использовать HMAC («код проверки подлинности сообщения с хеш-кодом» ).

public static string CreateHMAC(int data, byte[] key)
{
    using(var hmac = new HMACSHA1(key))
    {
        var dataArray = BitConverter.GetBytes(data);
        var resultArray = hmac.ComputeHash(dataArray);
        return Convert.ToBase64String(resultArray);
    }
}

Вы держите key в секрете на своем сервере и передаете data и результат CreateHMAC пользователю в URL. Когда пользователь щелкает ссылку, вы подтверждаете, что данные не были изменены.

public static bool VerifyHMAC(int data, byte[] key, string verification)
{
    using(var hmac = new HMACSHA1(key))
    {
        var dataArray = BitConverter.GetBytes(data);
        var computedHash = hmac.ComputeHash(dataArray);
        var verificationHash = Convert.FromBase64String(verification);

        for (int i = 0; i < verificationHash.Length; i++)
        {
            if (computedHash[i] != verificationHash[i])
            {
                return false;
            }
        }
        return true;
    }
}
2
Scott Chamberlain 7 Янв 2016 в 21:34

Вы можете увидеть здесь как вычислить хеш.

Поскольку функции HASH принимают только Массивы, я советую вам создать массив из ОДНОГО элемента с вашим целым числом.

Вы можете «подписать» ввод, вычисляя HASH вычисленного HASH выше ПЛЮС константу вашего приложения (или дату и час, например)

0
David BS 6 Янв 2016 в 22:26