Как получить sh строк байтовых массивов и потоков ввода-вывода в PowerShell с использованием распространенных алгоритмов хеширования - PullRequest
0 голосов
/ 01 мая 2020

Как данные, такие как строковые байтовые массивы, могут быть потоков * га sh с использованием общих алгоритмов хеширования, таких как MD4, MD5, SHA1 и т. Д. c ... Я пишу сценарий, который выполняет резервное копирование дисков и предотвращает ненужные копии и обнаруживает, если испорченные файлы должны иметь sh файлы быстро с некоторым алгоритмом хеширования, таким как MD4. Если у кого-то есть идея, как иметь sh файлы, io-потоки, байтовые массивы, строки ... используя любой алгоритм хеширования, пожалуйста, дайте мне знать. Также командлет Get-FileHa sh не существует во всех установках Windows, с которыми я столкнулся.

1 Ответ

0 голосов
/ 01 мая 2020

Создайте экземпляр [System.Security.Cryptography.MD5], затем передайте файловый поток его ComputeHash() методу:

function Get-MD5Sum
{
  param(
    [Parameter(Mandatory, ValueFromPipelineByPropertyName)]
    [Alias('PSPath')]
    [string[]]$Path
  )
  begin {
    $md5 = [System.Security.Cryptography.MD5]::Create()
  }

  process {
    foreach($filePath in $Path){
      # Resolve filesystem item
      $file = Get-Item -LiteralPath $Path

      # Skip if not a file
      if($file -isnot [System.IO.FileInfo]){
        continue
      }

      # Open a stream to read the file
      $filestream = $file.OpenRead()

      try {
        # Calculate + format hash, then output
        Write-Output $([pscustomobject]@{
          File = $file.FullName
          Hash = [BitConverter]::ToString($MD5.ComputeHash($filestream)) -replace '-'
        })
      }
      finally {
        # close file stream handle 
        $filestream.Dispose()
      }
    }
  }

  end {
    # Dispose of the hash provider
    $MD5.Dispose()
  }
}

Теперь вы можете вычислять хеши файлов MD5 без Get-FileHash:

PS C:\> $fileHashes = Get-ChildItem . |Get-MD5Sum
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...