У меня возникла интересная проблема .. Кажется, что ComputeHash() для хэша «HMACSHA256» не ведет себя детерминистически .. если я создаю два экземпляра HashAlgorithm с помощью HashAlgorithm.Create («HMACSHA256») .. И запустите ComputeHash, я получаю два разных результата. Ниже приведен пример статического класса, демонстрирующего это поведение.Почему 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 через точку останова в методе возвращает два разных хэши ..
Я знаю, Hash, предполагают, чтобы быть детерминированным. Итак, что дает? Что-то происходит с запуском в отладчике? Или любые другие идеи? на самом деле это просто две странные слова прямо сейчас :-P ..
Благодаря Джош
Есть ли у вас короткие данные об образцах, которые проявляют эту проблему? Что-нибудь меняет «bAll» между или во время звонков? –
HMAC - это хеш-ключ.Я не вижу ключа в вашем примере кода. Я считаю, что ключ задан случайным образом, если вы не укажете его явно. – dtb
ничего не меняется между вызовами. Как я уже сказал, я даже сделал это из окна immidiates. Вот 4 звонка из окна Immidiates .. да, они не идеальны, потому что вы должны распоряжаться HashAlgorithm, но результаты - это то же самое через окно Immidiates или метод. (Я включу их в следующий комментарий, потому что у меня нет места для копирования их здесь) –