Funkcja skrótu MD5 jest powszechnie używana i można ją zastosować do wielu danych wejściowych. Możemy skorzystać z wywołaniem
overloadowanej funkcji, która pobiera różne typy danych i zawsze zwraca taki sam typ danych. Pierwsze co nam przychodzi do głowy to napisanie kilku funkcji o takiej samej nazwie, ale różnych parametrach:
function Get-MD5 ([string]$word)
{
$utf8 = new-object -TypeName System.Text.UTF8Encoding
[byte[]]$bytes = $utf8.GetBytes($word)
return Get-MD5( $bytes)
}
function Get-MD5([ System.IO.FileInfo] $file)
{
$bytes = [System.IO.File]::ReadAllBytes($file.FullName)
return Get-MD5($bytes)
}
function Get-MD5([byte[]] $bytes)
{
$md5 = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = [System.BitConverter]::ToString($md5.ComputeHash($bytes))
return $hash
}
Ale niestety mamy problem z wywołaniem funkcji innych niż ta pierwsza zdefiniowana funkcja. Jednak, możesz zapisać funkcje z wieloma parametrami:
function Get-MD5
{
[CmdletBinding(DefaultParametersetName="s")]
param
(
[Parameter(ParameterSetName="b",Position=0)]
[byte[]] $b,
[Parameter(ParameterSetName="f", Position=0)]
[ System.IO.FileInfo] $f,
[Parameter(ParameterSetName="s", Position=0)]
[string]$s
)
$utf8 = new-object -TypeName System.Text.UTF8Encoding
$md5 = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
switch ($PsCmdlet.ParameterSetName)
{
# "b" {
# $md5Bytes = $md5.ComputeHash($bytes);
# break
# }
"f" {
$b = [System.IO.File]::ReadAllBytes($f.FullName)
break
}
"s" {
[byte[]]$b = $utf8.GetBytes($s);
break;
}
}
$md5Bytes = $md5.ComputeHash($b);
$hash = [System.BitConverter]::ToString( $md5Bytes )
return $hash
}
Tutaj pierwsze skrzypce gra parametr
$PsCmdlet.ParameterSetName. Po nim możemy określić jaki parametr był zdefiniowany. Poniżej przykładowe użycia funkcji Get-MD5 z różnymi typami parametrów:
Get-MD5 "Hello world"
get-MD5 (Get-Item "file.zip")
get-md5 1
get-md5 ([Byte] 0x4D)
Jak chcesz sprawdzić funkcje skrótu to możesz skorzystać z tego
linka.
Brak komentarzy:
Prześlij komentarz