Windows PowerShell 中的 Base64 编码

Marion Paul Kenneth Mendoza 2023年1月30日 2022年5月14日
  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