Поиск по сайту:

Get-FileHash (Microsoft.PowerShell.Utility)


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>]

Описание

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

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

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

Примеры

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

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

Get-FileHash /etc/apt/sources.list | Format-List

Algorithm : SHA256
Hash      : 3CBCFDDEC145E3382D592266BE193E5BE53443138EE6AB6CA09FF20DF609E268
Path      : /etc/apt/sources.list

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

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

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

Тип :

String

Принятые значения:

SHA1, SHA256, SHA384, SHA512, MD5

Позиция:

1

Значение по умолчанию:

SHA256

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-InputStream

Указывает входной поток.

Тип :

Транслировать

Позиция:

0

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-LiteralPath

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

Тип :

String[]

Псевдонимы:

PSPath, LP

Позиция:

0

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

True

Принимайте подстановочные знаки:

False

-Path

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

Тип :

String[]

Позиция:

0

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

True

Принимайте подстановочные знаки:

True

Входы

Строка

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

Выходы

Microsoft.PowerShell.Utility.FileHash

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