Base64String.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75

<#
.SYNOPSIS
Convert text to Base64 String
 
.DESCRIPTION
Encode provided text to Base64 String
 
.PARAMETER Value
Value to convert
 
.EXAMPLE
 
        ConvertTo-Base64String "text"
        echo "text" | encode64
#>


Function ConvertTo-Base64String {
    param (
        [Parameter(Position = 0, ValueFromPipeline  = $True)]
        [Alias("Text")]
        [string]$Value,
        [Parameter(Position = 1)]
        [bool]$UrlSafe = $false
    )
    $bytes = [System.Text.Encoding]::Unicode.GetBytes($Value)
    $encoded = [Convert]::ToBase64String($bytes)
    if($UrlSafe){
        $encoded = $encoded.TrimEnd('=').Replace('+', '-').Replace('/', '_')
    }
    return $encoded
}


<#
.SYNOPSIS
Convert text from Base 64 String
 
.DESCRIPTION
Decode provided text to Base64 String
 
.PARAMETER Value
Value to convert
 
.EXAMPLE
 
        ConvertFrom-Base64String "text"
        echo "text" | decode64
#>

Function ConvertFrom-Base64String {
    param (
        [Parameter(Position = 0, ValueFromPipeline  = $True)]
        [string]$EncodedValue
    )

    $EncodedValue = $EncodedValue.Replace('_', '/').Replace('-', '+')

    if( $EncodedValue.Length%2 -ne 0 ){
        $EncodedValue += '='
    }

    try { 
        $bytes = [System.Convert]::FromBase64String($EncodedValue)
     
    }
    catch {
        $EncodedValue += '=='
        $bytes = [System.Convert]::FromBase64String($EncodedValue)
    }

    $decodedText = [System.Text.Encoding]::Unicode.GetString($bytes)
    return  $decodedText
    
}