
Найти же конкретные отличия в паре образов ISO или двух нередактируемых PDF - отдельная грустная тема.
Содержание
1. Сравнить файлы из проводника Windows 11
Пример не требует установки абсолютно никаких приложений. Найдем хеш-сумму файла C:\Test\cpio.5.pdf
— включите Проводник (кто не в курсе, нажмите ⊞Win + E
)
— встаньте на папку с исследуемым файлом (в примере C:\Test\) и нажмите правую клавишу
— нажмите «Открыть в терминале».
появится экран терминала PowerShell
введите команду Get-FileHash [имя файла] | Format-List [Алгоритм]
в примере получилось
PS C:\Test> Get-FileHash cpio.5.pdf | Format-List
и нажмите Ввод.
Вы увидите почти уникальную хеш-сумму файла, полученную по умолчанию с помощью алгоритма SHA256. Алгоритм SHA256 — это двойка в 256 степени, или 77-значное десятичное число, или строка из 64 символов, которая содержит цифры и латинские буквы. Это очень много, и очень трудно подделать, но при желании можно в параметре Алгоритм
задать и более (или менее) сложные криптографические алгоритмы, подробнее читайте ниже.
Algorithm : SHA256
Hash : 7A797AF608C343DF68C9CCB9B7B4DA1791393966AD1CFB2168853ADEBCC1C683
Path : C:\Test\cpio.5.pdf
в этом примере, для файла «C:\Test\cpio.5.pdf» мы получили контрольную сумму из 64 символов.
Далее, чтобы проверить подлинность и полное отсутствие любых изменений в файле, полученном из другого источника, повторите сказанное для второго файла и сравните две контрольных суммы. Смена имени файла не влияет на контрольную сумму. Если суммы одинаковые — всё ок, изменений нет. Можно даже не открывать, к примеру, 50-страничное ТЗ, согласованное подрядчиком.
2. Сравнить файлы из консоли Windows командой CertUtil
Другой способ получить контрольную сумму файла — перейти в командную строку Windows. Для этого нажмите кнопку ⊞Пуск
в нижнем левом углу экрана и в поиске наберите команду cmd
, или нажмите на клавиатуре ⊞+R
.В открывшемся окне введите команду
certutil -hashfile [Путь к файлу] [Алгоритм]
certutil — это программа командной строки, подробнее здесь.
[Путь к файлу] — если командная строка находится не в той же папке, что и ваш файл, введите полный путь к файлу, в примере это C:\Test\cpio.5.pdf.
[Алгоритм] — для утилиты certutil можно указать следующие алгоритмы вычисления хеш-суммы файла: MD2, MD4, MD5, SHA1, SHA256, SHA384, SHA512.
Для SHA256 получится:
d:\>certutil -hashfile C:\Test\cpio.5.pdf SHA256
Нажмите Ввод, чтобы получить контрольную сумму. В примере видно, что сумма такая же, как в варианте выше. Единственное различие — заглавные и строчные буквы, в данном случае это одно и то же.
d:\>certutil -hashfile C:\Test\cpio.5.pdf SHA256
Хеш SHA256 C:\Test\cpio.5.pdf:
7a797af608c343df68c9ccb9b7b4da1791393966ad1cfb2168853adebcc1c683
CertUtil: -hashfile — команда успешно выполнена.
3. Сравнить файлы из Total Commander
Этот пример работает еще быстрее, но требует наличия платной программы — файлового менеджера Total Commander. Здесь всё предельно понятно:
1. Выделите файлы, которые нужно сравнить и перейдите в меню Файлы — Посчитать CRC-суммы.
2. Выберите алгоритм контрольной суммы. Total Commander предлагает 12 вариантов, оставим использованный выше SHA256.
3. В выбранной папке появится новый файл, в нашем случае (по умолчанию) Test.sha256. Встаньте на него и нажмите F3. Видим, что файлы одинаковые, а суммы полностью совпадают с примерами выше.
4. Если нет желания вглядываться и сравнивать длинные строки контрольных сумм, можно просто кликнуть мышью на файле с результатами проверки и сразу увидеть отчет
Зачем сравнивать файлы
- Обнаружить любые минимальные изменения без открытия или анализа файлов.
- Проверить безопасность. Убедиться, что файл не был заражен.
- Проверить подлинность. Убедиться, что файл не был подменен.
- Проверить целостность. Убедиться, что файл не был поврежден при передаче.
Как сравнить две версии книги Excel
Как сравнить два документа Word
Проверка хеш-сумм из Проводника Windows. Подробное руководство от Microsoft
Get-FileHash вычисляет хеш-значение файла с помощью выбранного хеш-алгоритма.
Модуль: Microsoft.PowerShell.Utility
Синтаксис
Get-FileHash
[-Path] <String[]>
[[-Algorithm] <String>]
[<CommonParameters>]
Get-FileHash
[-LiteralPath] <String[]>
[[-Algorithm] <String>]
[<CommonParameters>]
Get-FileHash
[-InputStream] <Stream>
[[-Algorithm] <String>]
[<CommonParameters>]
Описание
Хеш-значение — это уникальное значение, соответствующее содержимому файла. Вместо идентификации содержимого файла по имени файла, расширению или другому назначению хеш назначает уникальное значение содержимому файла. Имена файлов и расширения можно изменять без изменения содержимого файла и без изменения хеш-значения. Аналогичным образом содержимое файла можно изменить без изменения имени или расширения. Однако изменение даже одного символа в содержимом файла изменяет хеш-значение файла.
Целью хеш-значений является предоставление криптографически безопасного способа проверки того, что содержимое файла не было изменено. Хотя некоторые хеш-алгоритмы, в том числе MD5 и SHA1, больше не считаются безопасными для атак, цель безопасного хеш-алгоритма заключается в том, чтобы сделать невозможным изменение содержимго файла, либо случайно, либо вредоносной или несанкционированной попытки — и сохранить то же хеш-значение. Хеш-значения также можно использовать для определения того, имеют ли два разных файла одинаковое содержимое. Если хеш-значения двух файлов идентичны, содержимое файлов также идентично.
По умолчанию командлет Get-FileHash использует алгоритм SHA256, хотя можно использовать любой хеш-алгоритм, поддерживаемый целевой операционной системой.
Примеры
Пример 1. Вычисление хеш-значения для файла
Get-FileHash /etc/apt/sources.list | Format-List
Algorithm : SHA256
Hash : 3CBCFDDEC145E3382D592266BE193E5BE53443138EE6AB6CA09FF20DF609E268
Path : /etc/apt/sources.list
В этом примере используется командлет Get-FileHash
для вычисления хеш-значения файла /etc/apt/sources.list. Хэшалгоритм используется по умолчанию SHA256. Выходные данные передаются в командлет Format-List
для форматирования выходных данных в виде списка.
Пример 2. Вычисление хеш-значения для ISO-файла
Get-FileHash C:\Users\user1\Downloads\Contoso8_1_ENT.iso -Algorithm SHA384 | Format-List
Algorithm : SHA384
Hash : 20AB1C2EE19FC96A7C66E33917D191A24E3CE9DAC99DB7C786ACCE31E559144FEAFC695C58E508E2EBBC9D3C96F21FA3
Path : C:\Users\user1\Downloads\Contoso8_1_ENT.iso
В этом примере используется командлет Get-FileHash и алгоритм SHA384 для вычисления хеш-файла, скачанного администратором из Интернета. Выходные данные передаются в командлет Format-List для форматирования выходных данных в виде списка.
Пример 3. Вычисление хеш-значения потока
В этом примере мы используем System.Net.WebClient для скачивания пакета на странице выпуска PowerShell . Страница выпуска также документирует хеш SHA256 каждого файла пакета. Мы можем сравнить опубликованное хеш-значение с тем, с которым мы вычисляем Get-FileHash.
$wc = [System.Net.WebClient]::new()
$pkgurl = 'https://github.com/PowerShell/PowerShell/releases/download/v6.2.4/powershell_6.2.4-1.debian.9_amd64.deb'
$publishedHash = '8E28E54D601F0751922DE24632C1E716B4684876255CF82304A9B19E89A9CCAC'
$FileHash = Get-FileHash -InputStream ($wc.OpenRead($pkgurl))
$FileHash.Hash -eq $publishedHash
True
Пример 4. Вычисление хеша строки
PowerShell не предоставляет командлет для вычисления хеша строки. Однако можно написать строку в поток и использовать параметр InputStream Get-FileHash для получения хеш-значения.
$stringAsStream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($stringAsStream)
$writer.write("Hello world")
$writer.Flush()
$stringAsStream.Position = 0
Get-FileHash -InputStream $stringAsStream | Select-Object Hash
Hash
----
64EC88CA00B268E5BA1A35678A1B5316D212F4F366B2477232534A8AECA37F3C
Параметры
-Algorithm
Указывает функцию криптографического хеша, используемую для вычисления хеш-значения содержимого указанного файла или потока. Функция криптографического хеша имеет свойство, которое невозможно найти два разных файла с одинаковым хеш-значением. Хеш-функции обычно используются с цифровыми подписями и для целостности данных.
Допустимые значения для этого параметра:
- SHA1
- SHA256
- SHA384
- SHA512
- MD5
Если значение не указано или если параметр не указан, значение по умолчанию — SHA256.
По соображениям безопасности MD5 и SHA1, которые больше не считаются безопасными, следует использовать только для простой проверки изменений и не следует использовать для создания хеш-значений для файлов, требующих защиты от атак или изменения.
Тип: | |
Допустимые значения: | SHA1, SHA256, SHA384, SHA512, MD5 |
Position: | 1 |
Default value: | SHA256 |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-InputStream
Задает входной поток.
Тип: | ||
Position: | 0 | |
Default value: | None | |
Обязательно: | True | |
Принять входные данные конвейера: | False | |
Принять подстановочные знаки: | False |
-LiteralPath
Указывает путь к файлу. В отличие от параметра Path, значение параметра LiteralPath используется точно так же, как и тип. Символы не интерпретируются как подстановочные знаки. Если путь содержит escape-символы, заключите путь в одинарные кавычки. Одинарные кавычки указывают PowerShell не интерпретировать символы как escapeпоследовательности.
Тип: | String[] |
Aliases: | PSPath, LP |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-Path
Указывает путь к одному или нескольким файлам в виде массива. Разрешены подстановочные знаки.
Тип: | |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | True |
Входные данные
Строку, содержащую путь к файлу, можно передать в этот командлет.
Выходные данные
Microsoft.PowerShell.Utility.FileHash
Этот командлет возвращает объект, представляющий путь к указанному файлу, значение вычисляемого хеша и алгоритм, используемый для вычисления хеша.