# nejprve si načteme interaktivně požadované pověření
$Credential = Get-Credential $MujKlic = "MojeLehkéHeslo"
/*
CelyKlic vygeneruje klíč potřebné délky (lpozadovana) pro budouci XOR s kodovanym popř dekodovaným řetězcem
$keyX … puvodni klic, můze být menší než šifrovaný řetězec
—————–*/
Function CelyKlic ([string]$keyX,[int]$lpozadovana) { $keyL=$keyX.Length $j=53; // nastavime zaklad ASCII hodnoty 0-255 # [System.Console]::Write("lPozadovana="+[string]$lpozadovana+' '); while($keyX.Length -lt $lpozadovana){ $keyP=''; # vezmu puvodni klic KeyX trochu o upravim pomoci binarniho OR a $j a pridam jako rozsireni $j++ ;$j++ ;$j++ ; for ($i=0; $i -lt $keyL; $i++) { $pom=[char] ($keyX[$i] -bor $j) ; # nasledujici pridany znak-binarne OR s $j $keyP=$keyP+$pom } $KeyX=$KeyX+$KeyP } Return $KeyX # vrátíme modifikovaný klíč požadované délky }
/* Funkce provede kodovani/dekodovani pomocí XOR, pouzije modifikovaný klíč z CelyKlic
$ret kodovaný řetězec, $bkey – zadaný klíč
*/
Function koduj ([string] $ret, [string] $bkey) {
$private:jmP=''
$CelyK=CelyKlic $bkey $ret.Length
for ($i=0; $i -lt $ret.Length; $i++) {
$private:jmP=$private:jmP+[char] ($ret[$i] -bxor $CelyK[$i])
}
return $private:jmP
}
/* ted přichází vlastní zakodovaní nejprve UserName ze zadaného $credential
všiměte si zadávání parametrů, žádné závorky, žádné čárky
navíc , pokud by se objevil v těle volané funkce nějaký příkaz typu echo, pak se tento dostané do vracené hodnoty -to je na zastřelení */
$TXTjmeno=koduj $credential.UserName $MujKlic # protože to budu ukládat do textového souboru převedu na lehčí tvar Base64String $JMkodbase64=[System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($TXTjmeno)) $JMkodbase64 > ".\JMKodBase64.txt" # vytvoří v aktualním adresáři soubor JMKodBase64.txt
/*
není třeba vkládat CRLF, vloží ho automaticky
$CRLF=“`r`n“
$CRLF >> „.\JMKodBase64.txt“
*/
# u hesla je třeba převést z specialni kontrukce SecureString na string [string]$TXTpassword=ConvertFrom-SecureString($credential.Password) # z důvodu paranoi ještě zakodujeme jednou $TXTpassword=koduj $TXTpassword $MujKlic #[System.Console]::Writeline($TXTpassword) $TXTpassword64=[System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($TXTpassword)) $TXTpassword64 >> ".\JMKodBase64.txt" # a přidáme na konec souboru
#————- Pro načtení credetials zpátky
$cUserName ='' $cPassw = '' $CRED64= gc JMKodBase64.txt # načte obsah textového souboru do pole $CRED64, každý řádek v jednom prvku # Prevedem zpet z BASE64 $txtJmeno=[System.Text.Encoding]::UNICODE.GetString([System.Convert]::FromBase64String($CRED64[0])) # dekodujeme $cUserName=koduj $txtJmeno $MujKlic #[System.Console]::Writeline($cUserName) $txtPassw=[System.Text.Encoding]::UNICODE.GetString([System.Convert]::FromBase64String($CRED64[1])) $cPassw=koduj $txtPassw $MujKlic #[System.Console]::Writeline($cPassw) # u hesla musíme převést na SecureString $sPassw=ConvertTo-SecureString($cPassw) # vytvoříme požadované Credential $cred = New-Object System.Management.Automation.PSCredential $cUserName, $sPassw #popr. pro dalsí pouzití $global:credNet=$cred.GetNetworkCredential()