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

Как создать MD5 хеш-сумму файла в Golang?

1. Создайте файл content.dat со следующим содержимым:

Форум Гоферов

Мы работаем над форумом для программистов на Golang. Очень нужны модераторы которые хотят помочь с ответами для новичков и помочь в развитии Go-сообщества.

Go на Форум

Уроки, статьи и Видео

Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.

Go в ВК Go в Telegram

2. Создайте файл checksum.go со следующим содержимым:

3. Запустите код через go run checksum.go в главном терминале;
4. Посмотрите на результат:

контрольная сумма go

5. Создайте файл sha_panic.go со следующим содержимым:

6. Запустите код через go run sha_panic.go;
7. Посмотрите на результат в терминале:

checksum go

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

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

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

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

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

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

 

Понравилась статья?

Поддержи наш проект, чтобы мы могли создать больше хорошего контента!