Search code examples
algorithmpowershellencryptionaesencryption-symmetric

AES. Encrypt array of bytes in powershell


I am need to encrypt array of bytes([byte[]]) in powershell script using AES cryptography method. I am find function that encode string:

[Reflection.Assembly]::LoadWithPartialName("System.Security")

function Encrypt-String($String, $Passphrase, $salt="My Voice is my P455W0RD!",     $init="Yet another key", [switch]$arrayOutput)
{
   $r = new-Object System.Security.Cryptography.RijndaelManaged
   $pass = [Text.Encoding]::UTF8.GetBytes($Passphrase)
   $salt = [Text.Encoding]::UTF8.GetBytes($salt)

   $r.Key = (new-Object Security.Cryptography.PasswordDeriveBytes $pass, $salt, "SHA1", 5).GetBytes(32) #256/8
   $r.IV = (new-Object Security.Cryptography.SHA1Managed).ComputeHash( [Text.Encoding]::UTF8.GetBytes($init) )[0..15]

   $c = $r.CreateEncryptor()
   $ms = new-Object IO.MemoryStream
   $cs = new-Object Security.Cryptography.CryptoStream $ms,$c,"Write"
   $sw = new-Object IO.StreamWriter $cs
   $sw.Write($String)
   $sw.Close()
   $cs.Close()
   $ms.Close()
   $r.Clear()
   [byte[]]$result = $ms.ToArray()
   if($arrayOutput) {
  return $result
   } else {
      return [Convert]::ToBase64String($result)
   }
}

Read code with comments at http://gallery.technet.microsoft.com/scriptcenter/PowerShell-Script-410ef9df

Help change the function so that it encode array of bytes and not a string

Ssory for my english. Hello from Russia :)


Solution

  • I am do that i am need. New code:

    [Reflection.Assembly]::LoadWithPartialName("System.Security")
    
     $String=$buff #ARRAY OF BYTES TO ENCODE
     $Passphrase="Pas"
      $salt="My Voice is my P455W0RD!"
      $init="Yet another key"
    
       $r = new-Object System.Security.Cryptography.AesManaged
       $pass = [Text.Encoding]::UTF8.GetBytes($Passphrase)
       $salt = [Text.Encoding]::UTF8.GetBytes($salt)
    
       $r.Key = (new-Object Security.Cryptography.PasswordDeriveBytes $pass, $salt, "SHA1", 5).GetBytes(32) #256/8
       $r.IV = (new-Object Security.Cryptography.SHA1Managed).ComputeHash( [Text.Encoding]::UTF8.GetBytes($init) )[0..15]
       $r.Padding="Zeros"
    
       $c = $r.CreateEncryptor()
       $ms = new-Object IO.MemoryStream
       $cs = new-Object Security.Cryptography.CryptoStream $ms,$c,"Write"
       $cs.Write($String, 0,$String.Length)
       $cs.Close()
       $ms.Close()
       $r.Clear()
       [byte[]]$Encrypted = $ms.ToArray()