Windows PowerShell 中的 Base64 編碼

Marion Paul Kenneth Mendoza 2023年1月30日
  1. 關於 Base 64
  2. 與 Base64 相互轉換
Windows PowerShell 中的 Base64 編碼

Base64 編碼是二進位制到文字編碼方法之一,它將二進位制資料表示為更易讀的字串格式。

沒有用於 Base64 轉換的 Windows PowerShell 本機命令(從 PowerShell [Core] 7.1 開始)。因此,目前需要直接使用 .NET 庫。本文將向你展示使用 Windows PowerShell 和 .NET 庫與 Base64 相互轉換的可能方法。

關於 Base 64

用技術術語來說,Base64 編碼將三個 8 位位元組轉換為四個 6 位位元組,由編號為 0-63 的位組成,因此名稱為 Base64。此外,解碼後的資料是原始字串語法的 3/4。

雖然 Base64 編碼方法可以對純文字進行編碼,但其真正的好處是將傳輸系統解釋為控制字元的不可列印字元編碼。

因此,你必須始終明確指定 Base64 位元組應表示的字元編碼。

與 Base64 相互轉換

在轉換為 Base64 時,你必須首先使用 Base64 字串的使用者期望的字元編碼來獲取你嘗試編碼的字串的位元組表示。

此外,在從 Base64 轉換時,你必須使用我們用於建立 Base64 表示的相同編碼將生成的位元組陣列解釋為字串。

以下示例將使用 .NET 庫在 UTF-8 編碼字串格式之間進行轉換:

轉換為 Base64:

[Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes('Motorhead'))

輸出:

TW90b3JoZWFk

從 Base64 轉換:

[Text.Encoding]::ASCII.GetString([Convert]::FromBase64String('TW90b3JoZWFk')) 

輸出:

Motorhead

本文一直將 Base64 編碼定義為一系列轉換為 ASCII 字串格式的位元組。但是,使用 Windows PowerShell 和 .NET 庫,我們可以直接轉換為其他字串格式,例如 Unicode 或 UTF-8。

要在 UTF-16LE(Unicode)或 ASCII 之間進行轉換,請將 [Text.Encoding]::Unicode[Text.Encoding]::ASCII 替換為 [Text.Encoding]::UTF8 分別。

示例語法:

[Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String("YmxhaGJsYWg="))
[Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String("YmxhaGJsYWg="))
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn