为何PowerShell生成的Base64字符串在其他工具解码时出现点号?
PowerShell生成的Base64在CyberChef解码出现点号的原因
编码过程
PowerShell编码代码
$x = "This text needs to be encoded" $z = [System.Text.Encoding]::Unicode.GetBytes($x) $y = [System.Convert]::ToBase64String($z) Write-Host("$y")
控制台输出的Base64字符串
VABoAGkAcwAgAHQAZQB4AHQAIABuAGUAZQBkAHMAIAB0AG8AIABiAGUAIABlAG4AYwBvAGQAZQBkAA==
解码过程
PowerShell解码代码
$v = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($y)) Write-Host("$v")
正常解码结果
This text needs to be encoded
第三方工具解码异常
将上述Base64字符串放入CyberChef等工具,使用「From base64」解码后,结果会出现点号:
T.h.i.s. .t.e.x.t. .n.e.e.d.s. .t.o. .b.e. .e.n.c.o.d.e.d.
原因解析
问题核心是编码格式不匹配:
- PowerShell里的
[System.Text.Encoding]::Unicode实际对应**UTF-16LE(小端序)**编码,这种编码下每个ASCII字符会被编码成两个字节——字符本身的字节加上一个空字节(0x00)。 - CyberChef等工具默认用UTF-8解码Base64还原出的字节流。UTF-8中单个ASCII字符仅占1字节,当它遇到UTF-16LE里的空字节(0x00)时,无法识别为有效字符,就会用点号(或其他替代符号)显示。
如果要在CyberChef里得到正确结果,需要先做「From base64」操作,再添加「Decode text」步骤并指定编码为UTF-16LE。
内容的提问来源于stack exchange,提问作者Lauri
相关产品推荐
相关产品推荐

