As is often the case, when working on a project I end up needing some sub-task done and search the web to see if someone have done it before. In this particular instance I couldn’t find any ready-made solutions for PowerShell, but I did find that someone had written a couple of functions in c# that did exactly what I needed. Luckily, translating from c# to PowerShell isn’t that hard, so I thought I’d share the functions I wrote (translated) with you.
NOTE! I take no credit for these functions, other than the fact I translated them from c#. The full credit goes to Jonathan Taylor.
These functions lets you decode and encode to and from Base64 Url.
function Invoke-Base64UrlDecode { | |
<# | |
.SYNOPSIS | |
.DESCRIPTION | |
.NOTES | |
http://blog.securevideo.com/2013/06/04/implementing-json-web-tokens-in-net-with-a-base-64-url-encoded-key/ | |
Author: Øyvind Kallstad | |
Date: 23.03.2015 | |
Version: 1.0 | |
#> | |
[CmdletBinding()] | |
param ( | |
[Parameter(Position = 0, Mandatory)] | |
[string] $Argument | |
) | |
$Argument = $Argument.Replace('–', '+') | |
$Argument = $Argument.Replace('_', '/') | |
switch($Argument.Length % 4) { | |
0 {break} | |
2 {$Argument += '=='; break} | |
3 {$Argument += '='; break} | |
DEFAULT {Write-Warning 'Illegal base64 string!'} | |
} | |
Write-Output $Argument | |
} |
function Invoke-Base64UrlEncode { | |
<# | |
.SYNOPSIS | |
.DESCRIPTION | |
.NOTES | |
http://blog.securevideo.com/2013/06/04/implementing-json-web-tokens-in-net-with-a-base-64-url-encoded-key/ | |
Author: Øyvind Kallstad | |
Date: 23.03.2015 | |
Version: 1.0 | |
#> | |
[CmdletBinding()] | |
param ( | |
[Parameter(Position = 0, Mandatory)] | |
[byte[]] $Argument | |
) | |
$output = [System.Convert]::ToBase64String($Argument) | |
$output = $output.Split('=')[0] | |
$output = $output.Replace('+', '–') | |
$output = $output.Replace('/', '_') | |
Write-Output $output | |
} |