I'm attempting to decode an attachment in an email file from base64 and save it to disk.
For testing purposes, this is my code. Where input.txt contains just the base64 encoded data, which is an HTML file.
$file = "C:\input.txt"
$data = Get-Content $file
[System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($data)) > out.html
The decoding works fine, and it generates a new file that contains all of the lines, and is visibly identical to the original attachment. The problem is that the output file is twice the size (actually (filesize*2)+6 bytes, in this case).
Am I decoding this improperly? I've also tried UTF8 instead of ASCII... same result.
In this regard, we shared with you the PowerShell commands that help in performing the Base64 encoding and decoding of the desired data. By making use of these commands, you can easily encode and decode any given strings with the Base64 coding in PowerShell in Windows 10.
If you are using a Windows system, there is no built-in command to directly perform Base64 encoding and decoding. But you can use the built-in command "certutil -encode/-decode" to indirectly perform Base64 encoding and decoding.
PowerShell Base64 is a technique or mechanism that is used to encode and decode data. The encoding and decoding are important in order to prevent the data from malware attacks. Base64 encoding and decoding is a popular method to encrypt and decrypt the data.
Well I got it working. Who knew Out-File re-encoded to Unicode by default? Solved by doing the following:
$file = "C:\input.txt"
$data = Get-Content $file
[System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($data)) | Out-File -Encoding "ASCII" out.html
This one-liner preserves the original encoding of the base64 encoded file, so it will work with binary files such as a PDF or ZIP. Change ".\input.txt"
and output.bin
as needed - this will take .\input.txt
, base 64 decode it, and then write the bytes out to output.bin
exactly as they were when the file was encoded.
$file = ".\input.txt"; [System.Convert]::FromBase64String((Get-Content $file)) | Set-Content output.bin -Encoding Byte
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With