Powershell – uložení Credential do souboru

# 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()

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *