PowerShell base64与普通base64的区别

37

我使用 PowerShell 将字符串进行转换。

$Text = 'ouser:v3$34@#85b&g%fD79a3nf'
$Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text)
$EncodedText =[Convert]::ToBase64String($Bytes)
$EncodedText 

然而,当我使用https://www.base64decode.org/或一些用于base64编码的Java库时,我得到了一个不同且更短的版本。

示例字符串:

This is a secret and should be hiden

powershell结果:

VABoAGkAcwAgAGkAcwAgAGEAIABzAGUAYwByAGUAdAAgAGEAbgBkACAAcwBoAG8AdQBsAGQAIABiAGUAIABoAGkAZABlAG4A

正常的base64结果:

VGhpcyBpcyBhIHNlY3JldCBhbmQgc2hvdWxkIGJlIGhpZGVu

虽然我能够使用该网站解码这两个版本,但是使用我的Java代码,我只能解码后者。为什么会这样?是否存在多个版本的base64?这些差异来自哪里?


10
你正在使用 Unicode 编码,这意味着每个字符占用两个字节,其中一个字节对于 ASCII 码来说是零。请改用 UTF8 编码。 - wOxxOm
29
[System.Text.Encoding]::Unicode 指的是 UTF-16,而后者是 UTF-8。你可以使用 [System.Text.Encoding]::UTF8 - Thomas Glaser
的确,编码导致了这种行为。不幸的是,您无法将注释标记为答案。 - Zerg
1个回答

36

为了更好地发现这个问题,将@Raziel的评论作为答案添加。

[System.Text.Encoding]::Unicode] 是 UTF-16 格式,而后者是 UTF-8。你可以使用 [System.Text.Encoding]::UTF8


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接