I found the base code for this here: http://vstepic.blogspot.com/2013/02/how-to-convert-string-to-base64-and.html. If you want to know more about Base64, check out this
Wikipedia Entry
But I’m not a command-line guy, I’m a developer, and I like to have my code in a file where I can edit it, modify it, re-use it, and run it.
Function Base64Encode($textIn)
{
$b = [System.Text.Encoding]::UTF8.GetBytes("Hello World")
$encoded = [System.Convert]::ToBase64String($b)
return $encoded
}
Function Base64Decode($textBase64In)
{
$b = [System.Convert]::FromBase64String($textBase64In)
$decoded = [System.Text.Encoding]::UTF8.GetString($b)
return $decoded
}
#Test Logic
$base64Encoded = Base64Encode("Hello World")
Write-Host "`$base64Encoded=$base64Encoded"
$base64Decoded = Base64Decode($base64Encoded)
Write-Host "`$base64Decoded=$base64Decoded"
Here is the results of running the above code:
What is your password?: Hello World $base64Encoded=SGVsbG8gV29ybGQ= $base64Decoded=Hello World
Now, how can we use this? Let’s take the original code, comment out everything below the “#Test Logic” comment, and save it as “Base64Functions.ps1”.
I wanted to obfuscate a simple password in a config file. Encoding is definitely NOT encryption. But if someone is standing over your shoulder, or even opens the Config File – it will not be obvious that the password is Base64 and they certainly couldn’t convert it in their head or even memorize it.
I found samples for how to update a standard XML Config File at this link: http://blogs.msdn.com/b/sonam_rastogi_blogs/archive/2014/08/18/update-configuration-files-using-powershell.aspx
XML Config File Before:
XML Config File After:
. \Base64Functions.ps1 #reference the function created earlier
cls
#prompt the user to interactively enter his/her password
$password = Read-Host 'What is your password?'
#encode it
$base64EncodedPassword = Base64Encode($password)
Write-Host "`$base64EncodedPassword=$base64EncodedPassword"
#store it in our config file in the proper place
$configFilename = "c:\Users\neal.walters\Documents\GmailConfig.xml"
$xmlConfig = [xml](get-content $configFilename)
$obj = $xmlConfig.configuration.appSettings.add| where {$_.Key -eq 'GmailPassword'}
$obj.Value = $base64EncodedPassword
#we change the xml in memory, so now write it back to the disk file.
$xmlConfig.Save($configFilename)
Here is the results of running the above code (I typed in “Hello World” in response to the prompt.)
What is your password?: Hello World $base64Encoded=SGVsbG8gV29ybGQ= $base64Decoded=Hello World
XML Config File After:
In a future blog, I can show you how I use this to send GMail (Google emails) from Powershell.