2013-02-26 5 views
0

У меня есть этот код:md5 хэш, используя хэш-функцию с #

... 
    private void bBrowse_Click(object sender, EventArgs e) 
    { 

    OpenFileDialog ofd = new OpenFileDialog(); 
     if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
      { 
       string FileName = ofd.FileName; 
       tbKeyFile.Text = FileName; 
      } 
     if (!String.IsNullOrEmpty(tbKeyFile.Text)) 
     { 

      FileStream fs = new FileStream(tbKeyFile.Text, FileMode.Open); 

      MD5 hashFunction = MD5.Create(); 
      byte[] computedHashCode = hashFunction.ComputeHash(fs); 

      string HashInString = Convert.ToBase64String(computedHashCode); 

      lHash.Text = HashInString; 
     } 

    } 
... 

Но это не вычисления хэш md5. Он вычисляет контрольную сумму SHA1. Что я делаю неправильно?

+1

Это звучит маловероятно. Как вы проверяете выход? – SLaks

+1

'MD5.Create(). ComputeHash()' конечно не вернет хэш SHA1. – ken2k

+0

Он вычисляет хэш MD5 с выводом Base64 с кодировкой Base64. Вы ожидали выхода с шестнадцатеричным кодированием? 'BitConverter.ToString (hash) .Replace (" - "," ")' можно использовать для получения хэш-кодировки с шестнадцатеричным кодированием. – CodesInChaos

ответ

1

Как CodesInChaos сказал: MD5.ComputeHash() возвращает значение в базе64. Вы должны преобразовать его в формат HEX самостоятельно (конечно, если вы этого хотите). Пример того, как это может быть достигнуто, можно найти, например, here:

string HashInString = BitConverter.ToString(computedHashCode).Replace("-", ""); 

условии пример корректен:

M1UOF9zlCe+LwCfDNcWGPw== в Base64 равно 33550e17dce509ef8bc027c335c5863f HEX. Используйте Base64 to Hex Converter, чтобы проверить это!

+0

Я обновил свой ответ. Надеюсь, теперь это намного яснее. – MarcinJuraszek

0

Вход: 213441dasses Выход: M1UOF9zlCe + LwCfDNcWGPw == Ожидаемый результат: 33550e17dce509ef8bc027c335c5863f

Ваш ожидаемый результат является шестнадцатеричная строка, в то время как ваш фактический выход не является. Вы в настоящее время конвертируете хеш в строку на основе 64, которая не обязательно вам нужна.

См. this answer, как вернуть ожидаемую шестнадцатеричную строку из хэша.

+0

Я не понимаю, что означает «str» в вашей ссылке? – Lasse

+0

@Lasse Это строка, которую вы хешируете. Важной частью является то, что после «Чтобы преобразовать хэш в шестнадцатеричную строку ...» – ken2k

+0

Теперь я сделал это как в вашей ссылке, но это все еще неправильно. Ожидаемый результат 33550e17dce509ef8bc027c335c5863f Выход: C81414CA06C3AAA287AB6B2978A1DF38EEF308AF – Lasse

Смежные вопросы