Почему ComputeHash не действует детерминировано?

Я столкнулся с интересной проблемой.. Кажется, что ComputeHash () для хеша "HMACSHA256" не ведет себя детерминировано.. если я создаю два экземпляра использования HashAlgorithm HashAlgorithm. Создайте ("HMACSHA256").. И выполненный ComputeHash, я получаю два различных результата.. ниже пример статический класс тот показ этого поведения.

internal static string HashPassword(byte[] bAll)
{
    using (HashAlgorithm s = HashAlgorithm.Create("HMACSHA256"))
    {
        return Convert.ToBase64String(s.ComputeHash(bAll));
    }
}

Я также попытался выполнить вызов, не статичный (на самом деле, он запустился не статичный, и я имею дважды и трижды и quadrudruple проверил мой входной массив.. абсолютно то же на каждом вызове.. Я даже сделал материал в immidiate окне как:

Convert.ToBase64String(HashAlgorithm.Create("HMACSHA256").ComputeHash(bAll)

И выполнение этого дважды в immidiates окне через точку останова в методе возвращает два различных хеша..

Я знаю, что Хеш, предполагают, чтобы быть детерминированным.. Таким образом, что дает? что-то продолжает выполнение в отладчике? Или какие-либо другие идеи? действительно это равняется всего двум странным для слов прямо сейчас :-P..

Спасибо Josh

12
задан Charles 20 May 2012 в 15:08
поделиться

2 ответа

HMAC - это хэш с ключом. Я не вижу ключа в коде вашего примера.

HashAlgorithm.Create("HMACSHA256") создает экземпляр HashAlgorithm, поэтому он ничего не знает о ключе. Скорее всего, он просто вызывает этот HMACSHA256 Constructor:

public HMACSHA256()

Инициализирует новый экземпляр класса HMACSHA256 с случайно сгенерированным ключом.

Вам нужен этот конструктор:

public HMACSHA256(byte[] key)

Инициализирует новый экземпляр класса HMACSHA256 с указанными ключевыми данными.

Если вы не хотите жестко кодировать алгоритм HMAC, вы можете использовать KeyedHashAlgorithm.Create и предоставить определенный ключ, установив свойство KeyedHashAlgorithm.Key.

Если вы не хотите использовать ключ, то используйте хэш без ключа, например SHA256.

24
ответ дан 2 December 2019 в 04:42
поделиться

Вам нужен ключ для HMACSHA256. Ключ будет случайным, если он не передан в конструктор.

3
ответ дан 2 December 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: