How to decode a Base64 string?

base64, powershell

Solution

Isn't encoding taking the text TO base64 and decoding taking base64 BACK to text? You seem be mixing them up here. When I decode using this online decoder I get:

BASE64: blahblah
UTF8: nVnV

not the other way around. I can't reproduce it completely in PS though. See sample below:

PS > [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("blahblah"))
nV�nV�

PS > [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("nVnV"))
blZuVg==

EDIT I believe you're using the wrong encoder for your text. The encoded base64 string is encoded from UTF8(or ASCII) string.

PS > [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("YmxhaGJsYWg="))
blahblah

PS > [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String("YmxhaGJsYWg="))
汢桡汢桡

PS > [System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String("YmxhaGJsYWg="))
blahblah

Problem

I have a normal string in Powershell that is from a text file containing Base64 text; it is stored in `$x`. I am trying to decode it as such: ``` $z = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($x)); ``` This works if `$x` was a Base64 string created in Powershell (but it's not). And this does not work on the `$x` Base64 string that came from a file, `$z` simply ends up as something like `䐲券`. What am I missing? For example, `$x` could be `YmxhaGJsYWg=` which is Base64 for `blahblah`. In a nutshell, `YmxhaGJsYWg=` is in a text file then put into a string in this Powershell code and I try to decode it but end up with `䐲券` etc.

Original source