48 lines
1.2 KiB
PowerShell
48 lines
1.2 KiB
PowerShell
|
param (
|
||
|
# Specifies a path to one or more locations.
|
||
|
[Parameter(Mandatory=$true,
|
||
|
HelpMessage="Path to resource for which to generate integrity hash.")]
|
||
|
[Alias("path", "resource")]
|
||
|
[ValidateNotNullOrEmpty()]
|
||
|
[string]
|
||
|
$filename,
|
||
|
|
||
|
[Parameter(HelpMessage="Desired hash algorithm.")]
|
||
|
[Alias("algorithm")]
|
||
|
[ValidateSet('sha256', 'sha384', 'sha512')]
|
||
|
[string]
|
||
|
$hashAlgo='sha384'
|
||
|
)
|
||
|
|
||
|
function hashSHA($type) {
|
||
|
switch($type) {
|
||
|
'sha256' { return [System.Security.Cryptography.SHA256]::Create() }
|
||
|
'sha384' { return [System.Security.Cryptography.SHA384]::Create() }
|
||
|
'sha512' { return [System.Security.Cryptography.SHA512]::Create() }
|
||
|
default {
|
||
|
Write-Host "`rUnknown hash algorithm.`r"
|
||
|
exit 2
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$fileContents = Get-Content $filename -Raw
|
||
|
$hashAlgo = $hashAlgo.ToLower()
|
||
|
$hashValue = hashSHA $hashAlgo
|
||
|
|
||
|
try {
|
||
|
$hashBytes = $hashValue.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($fileContents))
|
||
|
$hashBase64 = [System.Convert]::ToBase64String($hashBytes)
|
||
|
Write-Host "`r$hashAlgo-$hashBase64`r"
|
||
|
}
|
||
|
catch {
|
||
|
Write-Host "There was a problem generating a hash value."
|
||
|
exit 1
|
||
|
}
|
||
|
finally {
|
||
|
$hashValue.Dispose()
|
||
|
}
|
||
|
|
||
|
exit 0
|
||
|
|
||
|
#EOF
|