57 / 57 / 11
Регистрация: 07.03.2010
Сообщений: 157
1

Как вычислить MD5 хэш сумму файла

15.03.2010, 21:07. Показов 53843. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, ещё раз обращаюсь к опытным пользователям. Подскажите пожалуйста, как мне вычислить MD5 хэш сумму файла?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2010, 21:07
Ответы с готовыми решениями:

Как получить MD5-хеш файла
Добрый дннь уважаемые форумчане. Хотел бы у вас поинтересоваться. Собственно пишу я лаунчер на...

Получить MD5-хэш для значения из базы данных
вот как мне написать код который как бы в базе данных будет то есть вот для буквы а мд5 является...

MD5 хэш для первых n байтов файла
Здравствуйте уважаемые программисты. Подскажите каким способом можно осуществить мою затею со...

Почему меняется MD5-хэш файла при каждой компиляции, хотя вроде бы ничего не поменялось?
Если компилятор игнорирует комментарии в коде, да и вообще ему (вроде) должно быть пофиг стоит у...

12
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
15.03.2010, 21:18 2
Лучший ответ Сообщение было отмечено как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
        private string ComputeMD5Checksum(string path)
        {
            using (FileStream fs = System.IO.File.OpenRead(path))
            {
                MD5 md5 = new MD5CryptoServiceProvider();
                byte[] fileData = new byte[fs.Length];
                fs.Read(fileData, 0, (int)fs.Length);
                byte[] checkSum = md5.ComputeHash(fileData);
                string result = BitConverter.ToString(checkSum).Replace("-", String.Empty);
                return result;
            }
        }
26
57 / 57 / 11
Регистрация: 07.03.2010
Сообщений: 157
15.03.2010, 21:31  [ТС] 3
Огромное спасибо. Я рад этому форуму. Он дает развитие начинающим программистам и особенно его пользователи.

Я новичок в этом деле, как эта форма получит имя файла?
0
92 / 79 / 9
Регистрация: 10.03.2010
Сообщений: 172
16.03.2010, 09:04 4
в программе пишешь
C#
1
tring md5=ComputeMD5Checksum(path);
, где path путь до файла. Например
C#
1
string md5=ComputeMD5Checksum("C:\\boot.ini");
И не забудь в начало программы добавить
C#
1
2
using System.IO;
using System.Security.Cryptography;
2
57 / 57 / 11
Регистрация: 07.03.2010
Сообщений: 157
16.03.2010, 12:21  [ТС] 5
Спасибо!
0
0 / 0 / 0
Регистрация: 16.10.2009
Сообщений: 5
10.05.2010, 13:19 6
а как быть,если в программе нужно вычислить хеш от самой себя?например, если требуется написать что-то вроде модуля контроля целостности я попробовал, программа вылетает
0
57 / 57 / 11
Регистрация: 07.03.2010
Сообщений: 157
10.05.2010, 13:21  [ТС] 7
Попробуй вычислять с помощью CRC32..
0
0 / 0 / 0
Регистрация: 16.10.2009
Сообщений: 5
10.05.2010, 17:04 8
Спасибо, CRC32 сработало
0
keratus
12.03.2012, 17:12 9
UPну тему, так как не совсем разобрался с кодом.
У меня есть похожая задача:
Нужно сравнить два одинаковых файла . Один из которых находится на локальном диске(с этим проблем нет) и другой , находящийся на фтп (вот с этим вся и беда)

Покажу участок кода, где юзаю это.
Библиотеки все подключены, поэтому пишу сокращенно
C#
1
2
3
4
5
6
7
8
9
10
11
12
public string ComputeMD5Checksum(string path)
        {
            FileStream fs = File.OpenRead(path);
            {
                MD5 md5 = new MD5CryptoServiceProvider();
                byte[] fileData = new byte[fs.Length];
                fs.Read(fileData, 0, (int)fs.Length);
                byte[] checkSum = md5.ComputeHash(fileData);
                string result = BitConverter.ToString(checkSum).Replace("-", String.Empty);
                return result;
            }
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//Сохранения файла с фтп сервера в заданной директории
        void GetFileFromFtp()
        {
            var request = (FtpWebRequest)WebRequest.Create(@"ftp://ipadress/folder/Run.exe");
            request.Method = WebRequestMethods.Ftp.GetFileSize;
            request.Credentials = new NetworkCredential("password", "login");
 
            try
            {
                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                string md5local = ComputeMD5Checksum(@"C:\folder\Run.exe");
                string md5remote = ComputeMD5Checksum(@"ftp://ipadress/folder/Run.exe");
                if (md5local != md5remote)
                {
                    DownloadFile();
                    MessageBox.Show("MD5 Разные, скачал новую версию!");
                }
                else
                {
                    MessageBox.Show("MD5 одинаковые");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Нихрена не копирует \n " + ex);
            }
        }







и вот эта сволочь вылетает с ошибкой System.NotSupportedException: Данный формат не поддерживается.
Есть у кого идеи? Буду очень признателен!
57 / 57 / 11
Регистрация: 07.03.2010
Сообщений: 157
12.03.2012, 19:37  [ТС] 10
keratus, сначала скачайте и сохраните файл, а после уже сосчитайте его хэш. Удаленно хэш функция ComputeMD5Checksum не распознает.
0
keratus
13.03.2012, 10:43 11
Спасибо.
Jackee
23.10.2012, 21:21 12
По поводу контроля целостности путем подсчета хэша от файла... Строка хэша фиксированной длины, а файлы большие, т.е., по идее, должна увеличиться большая вероятность коллизий (для разных файлов хэш будет одинаковый). Есть ли кто-нибудь, кто задумывался над этим? И, если есть, то подскажите примерное решение. Мне пока пришло в голову разбивать файл на равные части, считать хэш от каждой части, складывать получившиеся строки и считать хэш заново.
Эксперт .NET
10536 / 6464 / 1502
Регистрация: 25.05.2015
Сообщений: 19,592
Записей в блоге: 14
24.02.2016, 10:21 13
Тем, кто захочет повторить, как в теме Как ускорить получения crc32 о файле? md5 не читает файлы более 512 мегабайт!
Здесь:
C#
1
2
byte[] fileData = new byte[fs.Length];
fs.Read(fileData, 0, (int)fs.Length);
происходит чтение всего файла в оперативную память. Отсюда следует, что если файл очень большой, то либо буфер может не выделиться, либо файл может считываться очень долго.
Используйте чтение по частям или потоки.
OutOfMemory при сравнении MD5 нескольких больших файлов
2
24.02.2016, 10:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.02.2016, 10:21
Помогаю со студенческими работами здесь

Как получить MD5-хэш введенного пароля?
Всем доброго времени суток. Сейчас пишу простенький лаунчер для своего сервера и он должен брать...

Хэш sha1 и md5
Посчитать хэш sha1 и md5 выбранный пользователем файл алгоритмом . Использовать стандартную...

Хэш,md5,сортировка Шэлла
Помогите пжс девочке разобраться с 3 вещами. 1 - необходимо просмотреть содержимое всех ячеек...

Получить MD5-хэш для строк
вот как получить мд5 через пробел от такого отрывка кода: Console.WriteLine(s7 + i.ToString() + s2...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru