Генерация MD5 контрольной суммы в Golang

Хеш, или так называемая контрольная сумма является самым простым способом сравнения контента для проверки на изменения. Далее будет показано, как создать контрольную сумму из содержимого файла. В целях демонстрации будет использовать хеш функция MD5.

Как это работает

На самом деле имен­но кон­троль­ной сум­мы уже нет — это назва­ние нам доста­лось с тех вре­мён, когда для про­вер­ки точ­но­сти пере­да­чи дан­ных исполь­зо­ва­ли 7 бит вме­сто 8. Вось­мой бит был кон­троль­ным, и в нём нахо­ди­лась сум­ма пер­вых семи бит без учё­та стар­ших раз­ря­дов. Когда полу­ча­те­лю при­хо­ди­ла оче­ред­ная пор­ция дан­ных, он скла­ды­вал 7 бит и срав­ни­вал сум­му с вось­мым. Если они сов­па­да­ли, зна­чит, дан­ные, ско­рее все­го, пере­да­лись вер­но. Тогда линии свя­зи были не таки­ми надёж­ны­ми, как сей­час, и если что-то пере­да­ва­лось непра­виль­но, такие дан­ные нуж­но было отпра­вить зано­во. С тех пор и пошло поня­тие кон­троль­ной суммы.

Сей­час сум­му уже никто не исполь­зу­ет, а вме­сто это­го рабо­та­ют спе­ци­аль­ные программы:

  1. Берут дан­ные, для кото­рых нуж­но соста­вить кон­троль­ную сумму.
  2. По спе­ци­аль­но­му алго­рит­му эти дан­ные пре­вра­ща­ют­ся в одну стро­ку из символов.
  3. Эту стро­ку тек­ста при­кла­ды­ва­ют к исход­но­му фай­лу и гово­рят — ребя­та, вот кон­троль­ная сум­ма (то есть стро­ка). Если вы не уве­ре­ны, что всё ска­ча­ли пра­виль­но, проверьте.
  4. Те, кто ска­чал исход­ный файл, запус­ка­ют про­грам­му про­вер­ки кон­троль­ных сумм и гово­рят ей — вот файл, а вот его кон­троль­ная сум­ма, про­верь, пожа­луй­ста, всё ли тут правильно.
  5. Про­грам­ма сама состав­ля­ет кон­троль­ную сум­му по тому же алго­рит­му и срав­ни­ва­ет с вашей.
  6. Если кон­троль­ные сум­мы сов­па­да­ют — всё отлич­но, дан­ные в поряд­ке, мож­но поль­зо­вать­ся. Если нет — про­грам­ма выве­дет сооб­ще­ние, что сум­мы отли­ча­ют­ся. Это зна­чит, что во вре­мя ска­чи­ва­ния воз­ник­ла ошиб­ка или кто-то спе­ци­аль­но под­ме­нил исход­ные дан­ные, что­бы навре­дить вам.

Смысл тех­но­ло­гии в том, что для любо­го фай­ла и алго­рит­ма есть толь­ко одна кон­троль­ная сум­ма. Если в фай­ле изме­нить пред­ло­же­ние, сло­во или несколь­ко сим­во­лов, кон­троль­ная сум­ма будет уже дру­гой. Это как циф­ро­вой отпе­ча­ток паль­ца, толь­ко для данных.

Самый про­стой вари­ант орга­ни­зо­вать кон­троль­ную сум­му — исполь­зо­вать хеши, напри­мер, MD5. Мы уже гово­ри­ли про хеши в ста­тье про Фейс­бук и уте­рян­ные паро­ли, но MD5 — мно­го­гран­ная вещь, и в своё вре­мя его все исполь­зо­ва­ли для созда­ния кон­троль­ных сумм.

Но при­мер­но с 2006 года все ста­ли пере­хо­дить на дру­гие алго­рит­мы (CRC32, SHA-1, SHA-2 или MD5crypt). Дело в том, что уже есть мето­ды, кото­рые за при­ем­ле­мое вре­мя могут взло­мать MD5-хеш и сде­лать дру­гой файл с тем же раз­ме­ром и почти таким же содер­жи­мым, что и ваш. Это зна­чит, что зло­умыш­лен­ник может под­де­лать дан­ные таким обра­зом, что про­вер­ка кон­троль­ной сум­мы прой­дёт успеш­но и вы буде­те думать, что всё в порядке.

Читайте также:  Linux Wine: как установить и пользоваться

Что такое хеш и хэширование простыми словами

Слово хеш происходит от английского «hash», одно из значений которого трактуется как путаница или мешанина. Собственно, это довольно полно описывает реальное значение этого термина. Часто еще про такой процесс говорят «хеширование», что опять же является производным от английского hashing (рубить, крошить, спутывать и т.п.).

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

Для обычного человека это кажется белибердой, но как ни странно в наше время без хеширования практически невозможна работа в интернете. Так что же это такая за функция? На самом деле она может быть любой (приведенный выше пример это не есть реальная функция — он придуман мною чисто для вашего лучшего понимания принципа). Главное, чтобы результаты ее работы удовлетворяли приведенным ниже условиям.

Зачем нужен хэш

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

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

Каким образом это работает?

Создание контрольных сумм файлов называется хешированием. Сама же контрольная сумма — это некоторая строка определённой длины, состоящая из последовательности букв и цифр. Нужно заметить, хеширование никоим образом не зашифровывает файл, а контрольная сумма ничего не расшифровывает. Контрольная сумма называется суммой потому, что это результат однонаправленного криптографического «суммирования» — специального алгоритма. А контрольной она называется потому, что её значение (как и длина контрольной строки — обычно 32 символа) будет всегда одним и тем же, если файл никак не изменялся, независимо от того, сколько раз и при каких условиях вычисляется его контрольная сумма. Но стоит над файлом произвести даже самые незначительные изменения (например, вставить один лишний пробел в текстовом файле), как значение контрольной суммы изменится. Таким образом, значение контрольной суммы меняется, если хотя бы один бит файла изменился.

Читайте также:  Взлом Wi-Fi с помощью Kali Linux: записки очкастого эксперта

Для создания и проверки контрольный сумм существует два основных метода: MD5 и SHA. Первый считается устаревшим, поскольку для задач шифрования может быть относительно нетрудно взломан. Однако, на работу с контрольными суммами файлов это никак не влияет. Главным же плюсом MD5 является его скорость — она быстрее, чем у SHA, да и вообще других методов шифрования.

Но нельзя не упомянуть также и о том, что в настоящее время всё-таки популярность SHA быстро растёт. В большинстве случаев именно его контрольные суммы публикуются для выкладываемых для загрузки файлов.

SHA имеет несколько версий. Обычно, при публикации это указывается, например: SHA1, SHA2. Это подсказывает пользователю, каким именно инструментом, реализующим одну из версий SHA нужно воспользоваться при проверке. Если же контрольная сумма указана без номера, то это SHA1. Вообще, для проверки целостности файлов оба метода одинаково хороши, выбор зависит от того, контрольная сумма какого метода опубликована для загружаемых файлов.

Хеширование данных

Криптографическая хеш-функция (хеш) — это математический алгоритм, преобразовывающий произвольный массив данных в состоящую из букв и цифр строку фиксированной длины.

Это определение означает, что с помощью алгоритма хеширования можно получить фиксированную строку цифр и букв, преобразовав текст произвольной длины. Полученный хеш можно хранить в качестве контрольного значения для проверки целостности преобразованных данных: если данные изменятся, то при повторном преобразовании их в хеш одинаковым алгоритмом получится другое значение.

Известными алгоритмами хеширования являются MD5, SHA-1 и SHA-2.

Основные принципы хеширования:

  • при хешировании одинаковых данных получается одинаковое значение хеша (хеш-кода);
  • разные данные преобразуются в разные хеш-коды (хеш-суммы);
  • криптостойкость хеш-функции заключается в стойкости к восстановлению хешируемых данных и стойкости к коллизиям преобразования.

Одним из самых простых применений хеширования является хранение паролей (считается более защищённым способом, чем хранение паролей в явном виде).

С помощью хеширования в можно контролировать в различных сервисах распространение медиафайлов, сравнивая их хеш-коды, можно отслеживать целостность хранимых и передаваемых данных или детектировать защитным ПО вредоносные программы.

Модуль crypto — Функции MD5() и Sha1()

Пакет crypto содержит имплементации известных функций хеширования данных. MD5 хеш функция расположена в пакете crypto/md5. Каждая хеш функция в пакете crypto имплементирует интерфейс Hash. Обратите внимание, что Hash содержит метод Write. С методом Write он может использоваться как Writer. Это видно в функции FileMD5. Метод Sum от Hash принимает аргумент байтового среза, где должен находиться финальный хеш.

На заметку: Метод Sum не подсчитывает хеш аргумента, но рассчитывает на хеш в аргумент.

С другой стороны функция пакета может использоваться для создания хеша напрямую. В данном случае аргумент функции Sum является вычисленным из значений хеша.

Пакет crypto имплементирует все варианты SHA хеширования, а также другие хеш функции. Они обычно используются одинаково. К хеш функциям можно получить доступ через константу из пакета crypto. К примеру, (). Однако в данном случае пакет с данной функцией должен быть связан со встроенным двоичным файлом (можно использовать пустой импорт import _ «crypto/md5»), в противном случае вызов New приведет к ошибке.

Модуль crypto — Функции MD5() и Sha1()

На заметку: Сам по себе пакет hash содержит CRC контрольные суммы и многое другое.

Читайте также:  ShareMe – как пользоваться этим приложением на Xiaomi

Vasile Buldumac

Администрирую данный сайт с целью распространения как можно большего объема обучающего материала для языка программирования Go. В IT с 2008 года, с тех пор изучаю и применяю интересующие меня технологии. Проявляю огромный интерес к машинному обучению и анализу данных.

E-mail: @

Образование

Технический Университет Молдовы (), Факультет Вычислительной Техники, Информатики и Микроэлектроники

  • 2014 — 2018 Universitatea Tehnică a Moldovei, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
  • 2018 — 2020 Universitatea Tehnică a Moldovei, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»

Проверяем хэш файла с помощью утилиты MDFileChecker

Есть еще одна полезная программа, которая может помочь проверить контрольные суммы MD5. Отличительной чертой данной утилиты, является возможность работы без установки. Загрузить ее можно здесь:

Скачать MD5 FileChecker

Проверяем хэш файла с помощью утилиты MDFileChecker

После загрузки можете сразу же запустить.

Нажмите на кнопку «Обзор…» и выберите файл для проверки. Далее нажимаете на «Рассчитать» и через некоторое время (пока программа вычисляет сумму) появится полученное значение MD5 для данного файла.

Теперь, чуть ниже, в соответствующее поле, вставляем контрольную сумму алгоритма MD5 и делаем клик по кнопке «Проверить». Если все Ок, то появится сообщение о совпадении сумм и о том, что файл не поврежден.

Проверяем хэш файла с помощью утилиты MDFileChecker

Если это не так, то появится сообщение следующего вида.

Так что смело устанавливаем игру или программу на свой компьютер только в том случае, если фактическая сумма совпадает с контрольной

Теперь вы разобрались что такое контрольная сумма и узнали для чего она предназначена. И вы можете извлечь пользу вычисления подобных сумм, определяя целостность скачанных данных. В этом помогут упомянутые, в данной статье, программы HashTab и MD5 FileChecker. Плюс первой, ее способность работать разными типами алгоритмов, для вычисления хеша. Но зато вторая, хоть и работает только с MD5, но зато способна запускаться без установки на компьютер. Это плюс, если вы не хотите слишком засорять свою систему множеством программ.

Проверяем хэш файла с помощью утилиты MDFileChecker

Если возникли вопросы, то можете смело их задавать в комментариях.

Скачать HashTab

Категория: Безопасность
Размер инсталлятора (архива): 1.1 Мб
Поддержка ОС: Windows XP,7,8,10
Язык интерфейса: Английский, Русский…
Безопасность: Вирусов нет
Похожие программы:
Ссылка на инсталлятор/сайт: Скачать/Перейти

Вот такое простое средство для дополнительной защиты от вирусов. Теперь знаете, что такое хеш-сумма файла, зачем и как её замерять. До новых полезных компьютерных программ и интересных приложений на Андроид.

Скачать HashTab

ПОЛЕЗНОЕ ВИДЕО5/5(10 голосов )

Скачать HashTab

С Уважением, Сергей Трофимов (не певец) 🙂

История моего Никнейма (Svengali)

Дата публикации (обновления):

Я только обозреваю программы!

Любые претензии — к их производителям!

Все комментарии проходят модерацию