Encode / Decode .EXE into Base64 Encode / Decode .EXE into Base64 powershell powershell

Encode / Decode .EXE into Base64


The problem was caused by:

  1. Get-Content without -raw splits the file into an array of lines thus destroying the code
  2. Text.Encoding interprets the binary code as text thus destroying the code
  3. Out-File is for text data, not binary code

The correct approach is to use IO.File ReadAllBytes:

$base64string = [Convert]::ToBase64String([IO.File]::ReadAllBytes($FileName))

and WriteAllBytes to decode:

[IO.File]::WriteAllBytes($FileName, [Convert]::FromBase64String($base64string))


Just to add an alternative for people looking to do a similar task: Windows comes with certutil.exe (a tool to manipulate certificates) which can base64 encode and decode files.

certutil -encode test.exe test.txtcertutil -decode test.txt test.exe


This is a purely PowerShell version of Swonkie's answer which, despite working quite well if you have access to the utility, isn't a PowerShell answer - which is what I needed.

$SourceFile    = "C:\Src\OriginalBinaryFile.dll"$B64File       = "C:\Src\DllAsB64.txt"$Reconstituted = "C:\Src\ReConstituted.dll"[IO.File]::WriteAllBytes($B64File,[char[]][Convert]::ToBase64String([IO.File]::ReadAllBytes($SourceFile)))[IO.File]::WriteAllBytes($Reconstituted, [Convert]::FromBase64String([char[]][IO.File]::ReadAllBytes($B64File)))

As a side note. If the DllAsB64.txt is created by certutil, it will be wrapped by these lines.

-----BEGIN CERTIFICATE-----

-----END CERTIFICATE-----

After removing these lines the PowerShell command above will decode it. Certutil ignores them so it will decode its own output or the PowerShell output.