Поделиться через


Get-FileHash

Вычисляет хэш-значение для файла с помощью указанного хэш-алгоритма.

Синтаксис

Get-FileHash
   [-Path] <String[]>
   [-Algorithm <String>]
   [<CommonParameters>]
Get-FileHash
   -LiteralPath <String[]>
   [-Algorithm <String>]
   [<CommonParameters>]
Get-FileHash
   -InputStream <Stream>
   [-Algorithm <String>]
   [<CommonParameters>]

Описание

Командлет Get-FileHash вычисляет хэш-значение файла с помощью указанного алгоритма хэша. Хэш-значение представляет собой уникальное значение, соответствующее содержимому файла. Вместо определения содержимого файла по его имени, расширению или иному обозначению хэш назначает содержимому файла уникальное значение. Имена и расширения файлов могут изменяться без изменения содержимого файла и без изменения хэш-значения. Аналогичным образом содержимое файла можно изменить без изменения имени или расширения. Однако при изменении даже одного символа в содержимом файла хэш-значение этого файла тоже изменяется.

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

По умолчанию Get-FileHash командлет использует алгоритм SHA256, хотя можно использовать любой хэш-алгоритм, поддерживаемый целевой операционной системой.

Примеры

Пример 1. Вычисление хэш-значения для файла

В этом примере командлет используется Get-FileHash для вычисления хэш-значения файла Powershell.exe . Используется хэш-алгоритм по умолчанию — SHA256. Выходные данные передаются Format-List командлету для форматирования выходных данных в виде списка.

Get-FileHash $PSHOME\powershell.exe | Format-List

Algorithm : SHA256
Hash      : 908B64B1971A979C7E3E8CE4621945CBA84854CB98D76367B791A6E22B5F6D53
Path      : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

Пример 2. Вычисление хэш-значения для ISO-файла

В этом примере используется Get-FileHash командлет и алгоритм SHA384 для вычисления хэш-значения ISO-файла, скачаного администратором из Интернета. Выходные данные передаются Format-List командлету для форматирования выходных данных в виде списка.

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

Пример 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
  • MACTripleDES
  • MD5
  • RIPEMD160

Если значение не указано или параметр пропущен, используется значение по умолчанию — SHA256.

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

Тип:String
Допустимые значения:SHA1, SHA256, SHA384, SHA512, MACTripleDES, MD5, RIPEMD160
Position:Named
Default value:SHA256
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-InputStream

Задает входной поток.

Тип:Stream
Position:Named
Default value:None
Обязательно:True
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-LiteralPath

Указывает путь к файлу. В отличие от параметра Path, значение параметра LiteralPath используется точно так же, как и типизированный параметр. Никакие символы не распознаются как подстановочные знаки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки указывают PowerShell не интерпретировать символы как escape-последовательности.

Тип:String[]
Aliases:PSPath
Position:Named
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-Path

Указывает путь к одному или нескольким файлам в виде массива. Можно использовать подстановочные знаки.

Тип:String[]
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:False
Принять подстановочные знаки:True

Входные данные

String

Строку, содержащую путь к файлу, можно передать в этот командлет.

Выходные данные

Microsoft.PowerShell.Utility.FileHash

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