Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,24 @@ Encode a plain text string into its base64 representation:
SGVsbG8gV29ybGQ=
```

### Convert a File to base64

Encode a plain text file into its base64 representation:

```text
123
456
```

```powershell
Get-Content file.txt | ConvertTo-Base64
```

**Expected Output:**
```powershell
MTIzCjQ1Ng==
```

### Decode a base64 String

Convert a base64 encoded string back to its original human-readable format:
Expand Down
19 changes: 16 additions & 3 deletions src/functions/public/ConvertTo-Base64.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,25 @@
ValueFromPipeline,
ValueFromPipelineByPropertyName
)]
[string] $String,

[object] $String,
# The encoding to use when converting the string to bytes.
[Parameter()]
[ValidateSet('UTF8', 'UTF7', 'UTF32', 'ASCII', 'Unicode', 'BigEndianUnicode', 'Latin1')]
[string] $Encoding = 'UTF8'
)
[Convert]::ToBase64String([System.Text.Encoding]::$Encoding.GetBytes($String))

begin {
$lines = @()
}

process {
$lines += $String
}

end {
$target = ($lines -Join [Environment]::NewLine)
$bytes = [System.Text.Encoding]::$Encoding.GetBytes($target)

[System.Convert]::ToBase64String($bytes)
}
}
16 changes: 16 additions & 0 deletions tests/Base64.Tests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,22 @@
It "'Hello World' | ConvertTo-Base64 -> SGVsbG8gV29ybGQ=" {
'Hello World' | ConvertTo-Base64 | Should -Be 'SGVsbG8gV29ybGQ='
}

It "@('123', '456') | ConvertTo-Base64 -> MTIzDQo0NTY=" -Skip:(!$IsWindows) {
@('123', '456') | ConvertTo-Base64 | Should -Be 'MTIzDQo0NTY='
}

It "@('123', '456') | ConvertTo-Base64 -> MTIzCjQ1Ng==" -Skip:(!$IsLinux) {
@('123', '456') | ConvertTo-Base64 | Should -Be 'MTIzCjQ1Ng=='
}

It "Get-Content tests/sample.txt | ConvertTo-Base64 -> Get-Content tests/sample-encoded-windows.txt" -Skip:(!$IsWindows) {
Get-Content tests/sample.txt | ConvertTo-Base64 | Should -Be $(Get-Content tests/sample-encoded-windows.txt)
}

It "Get-Content tests/sample.txt | ConvertTo-Base64 -> Get-Content tests/sample-encoded-linux.txt" -Skip:(!$IsLinux) {
Get-Content tests/sample.txt | ConvertTo-Base64 | Should -Be $(Get-Content tests/sample-encoded-linux.txt)
}
}
Context 'Function: ConvertFrom-Base64' {
It "ConvertFrom-Base64 -Base64String 'VGhpc0lzQU5pY2VTdHJpbmc=' -> ThisIsANiceString" {
Expand Down
1 change: 1 addition & 0 deletions tests/sample-encoded-linux.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gVXQgc2VkIHBvcnRhIG5pc2ksIGF0IGx1Y3R1cyB0b3J0b3IuIE1vcmJpIHNhZ2l0dGlzIGVsaXQgZXUgbWFzc2EgdWx0cmljZXMsIHZlbCBsYWNpbmlhIG5lcXVlIGZlcm1lbnR1bS4gUGhhc2VsbHVzIGxvYm9ydGlzIGlhY3VsaXMgZXggdXQgZWxlaWZlbmQuIEluIGhhYyBoYWJpdGFzc2UgcGxhdGVhIGRpY3R1bXN0LiBEdWlzIHV0IG1hdHRpcyBkb2xvci4gQ3JhcyBzZWQgdG9ydG9yIGp1c3RvLiBOYW0gc2VkIGdyYXZpZGEgZHVpLCBhIHBvc3VlcmUgZW5pbS4gQWVuZWFuIGZhdWNpYnVzIHBvcnRhIHVsdHJpY2VzLiBJbiBkaWFtIGVyb3MsIG1hbGVzdWFkYSB2ZWwgYWNjdW1zYW4gZXQsIGFjY3Vtc2FuIG5lYyBvcmNpLiBEb25lYyBhdCBlc3QgbmVjIGZlbGlzIGxhb3JlZXQgbWF0dGlzLiBOdW5jIGxhY2luaWEganVzdG8gZXJhdCwgdmVsIG1hbGVzdWFkYSBuZXF1ZSB2b2x1dHBhdCBjb21tb2RvLiBBbGlxdWFtIGxpYmVybyBtYWduYSwgb3JuYXJlIGlkIGF1Z3VlIGEsIHZ1bHB1dGF0ZSBjb25zZXF1YXQgbmliaC4KCk51bGxhIHZhcml1cywgbmVxdWUgdml0YWUgdWx0cmljZXMgdmVzdGlidWx1bSwgc2FwaWVuIG5lcXVlIHNvbGxpY2l0dWRpbiBhbnRlLCBub24gY29uc2VxdWF0IGVuaW0gcXVhbSBxdWlzIG1hc3NhLiBFdGlhbSB2aXRhZSBmZXJtZW50dW0gYW50ZS4gRnVzY2UgdmVsIG1hZ25hIGluIG5pc2kgbW9sZXN0aWUgbGFjaW5pYS4gTWF1cmlzIHB1bHZpbmFyIGRvbG9yIGV0IHNvZGFsZXMgbWFsZXN1YWRhLiBQZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzIGV0IG5ldHVzIGV0IG1hbGVzdWFkYSBmYW1lcyBhYyB0dXJwaXMgZWdlc3Rhcy4gVmVzdGlidWx1bSBjb252YWxsaXMgbG9ib3J0aXMgZW5pbSwgaW4gcGhhcmV0cmEgbmlzbCB0ZW1wdXMgdGVtcG9yLiBGdXNjZSB0aW5jaWR1bnQgbW9sbGlzIGdyYXZpZGEuIFBoYXNlbGx1cyBtYWxlc3VhZGEgdmVsaXQgc2VkIG1hdHRpcyB0cmlzdGlxdWUuIFBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMgZXQgbmV0dXMgZXQgbWFsZXN1YWRhIGZhbWVzIGFjIHR1cnBpcyBlZ2VzdGFzLg==
1 change: 1 addition & 0 deletions tests/sample-encoded-windows.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gVXQgc2VkIHBvcnRhIG5pc2ksIGF0IGx1Y3R1cyB0b3J0b3IuIE1vcmJpIHNhZ2l0dGlzIGVsaXQgZXUgbWFzc2EgdWx0cmljZXMsIHZlbCBsYWNpbmlhIG5lcXVlIGZlcm1lbnR1bS4gUGhhc2VsbHVzIGxvYm9ydGlzIGlhY3VsaXMgZXggdXQgZWxlaWZlbmQuIEluIGhhYyBoYWJpdGFzc2UgcGxhdGVhIGRpY3R1bXN0LiBEdWlzIHV0IG1hdHRpcyBkb2xvci4gQ3JhcyBzZWQgdG9ydG9yIGp1c3RvLiBOYW0gc2VkIGdyYXZpZGEgZHVpLCBhIHBvc3VlcmUgZW5pbS4gQWVuZWFuIGZhdWNpYnVzIHBvcnRhIHVsdHJpY2VzLiBJbiBkaWFtIGVyb3MsIG1hbGVzdWFkYSB2ZWwgYWNjdW1zYW4gZXQsIGFjY3Vtc2FuIG5lYyBvcmNpLiBEb25lYyBhdCBlc3QgbmVjIGZlbGlzIGxhb3JlZXQgbWF0dGlzLiBOdW5jIGxhY2luaWEganVzdG8gZXJhdCwgdmVsIG1hbGVzdWFkYSBuZXF1ZSB2b2x1dHBhdCBjb21tb2RvLiBBbGlxdWFtIGxpYmVybyBtYWduYSwgb3JuYXJlIGlkIGF1Z3VlIGEsIHZ1bHB1dGF0ZSBjb25zZXF1YXQgbmliaC4NCg0KTnVsbGEgdmFyaXVzLCBuZXF1ZSB2aXRhZSB1bHRyaWNlcyB2ZXN0aWJ1bHVtLCBzYXBpZW4gbmVxdWUgc29sbGljaXR1ZGluIGFudGUsIG5vbiBjb25zZXF1YXQgZW5pbSBxdWFtIHF1aXMgbWFzc2EuIEV0aWFtIHZpdGFlIGZlcm1lbnR1bSBhbnRlLiBGdXNjZSB2ZWwgbWFnbmEgaW4gbmlzaSBtb2xlc3RpZSBsYWNpbmlhLiBNYXVyaXMgcHVsdmluYXIgZG9sb3IgZXQgc29kYWxlcyBtYWxlc3VhZGEuIFBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMgZXQgbmV0dXMgZXQgbWFsZXN1YWRhIGZhbWVzIGFjIHR1cnBpcyBlZ2VzdGFzLiBWZXN0aWJ1bHVtIGNvbnZhbGxpcyBsb2JvcnRpcyBlbmltLCBpbiBwaGFyZXRyYSBuaXNsIHRlbXB1cyB0ZW1wb3IuIEZ1c2NlIHRpbmNpZHVudCBtb2xsaXMgZ3JhdmlkYS4gUGhhc2VsbHVzIG1hbGVzdWFkYSB2ZWxpdCBzZWQgbWF0dGlzIHRyaXN0aXF1ZS4gUGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cyBldCBuZXR1cyBldCBtYWxlc3VhZGEgZmFtZXMgYWMgdHVycGlzIGVnZXN0YXMu
3 changes: 3 additions & 0 deletions tests/sample.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut sed porta nisi, at luctus tortor. Morbi sagittis elit eu massa ultrices, vel lacinia neque fermentum. Phasellus lobortis iaculis ex ut eleifend. In hac habitasse platea dictumst. Duis ut mattis dolor. Cras sed tortor justo. Nam sed gravida dui, a posuere enim. Aenean faucibus porta ultrices. In diam eros, malesuada vel accumsan et, accumsan nec orci. Donec at est nec felis laoreet mattis. Nunc lacinia justo erat, vel malesuada neque volutpat commodo. Aliquam libero magna, ornare id augue a, vulputate consequat nibh.

Nulla varius, neque vitae ultrices vestibulum, sapien neque sollicitudin ante, non consequat enim quam quis massa. Etiam vitae fermentum ante. Fusce vel magna in nisi molestie lacinia. Mauris pulvinar dolor et sodales malesuada. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum convallis lobortis enim, in pharetra nisl tempus tempor. Fusce tincidunt mollis gravida. Phasellus malesuada velit sed mattis tristique. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.