如何为 AutoIt 和 PowerShell 获得相同的 base64 编码?

Posted

技术标签:

【中文标题】如何为 AutoIt 和 PowerShell 获得相同的 base64 编码?【英文标题】:How to get base64 encoding the same for AutoIt and PowerShell? 【发布时间】:2011-10-27 05:52:45 【问题描述】:

我使用Ward's AutoIt Machine Code Algorithm Collection 在 AutoIt 中获取字符串的 base64 编码:

#Include "Base64.au3"

Dim $Encode = _Base64Encode("ps")
MsgBox(0, 'Base64 Encode Data', $Encode)

结果:

cHM=

PowerShell代码获取相同字符串“ps”的base64编码:

$commands = 'ps'
$bytes = [System.Text.Encoding]::Unicode.GetBytes($commands)
$encodedString = [Convert]::ToBase64String($bytes)
$encodedString

我得到的是:

cABzAA==

PowerShell 的结果是我想要的。如何使用 AutoIt 获得相同的结果?我猜这是字符编码问题。

【问题讨论】:

【参考方案1】:

使用 ASCII 编码而不是 Unicode:

$bytes = [System.Text.Encoding]::ASCII.GetBytes($commands)

【讨论】:

嗨 MrKWatkins,对我来说,PowerShell 的结果是正确的。我需要 AutoIt 的这个结果。所以我无法更改 PowerShell 代码。 啊,抱歉,误读了。不知道 AutoIt,但是它有没有一种方法可以用于 base 64 编码字节而不是字符串?在这种情况下,您可以自己使用 Unicode 编码手动将字符串转换为字节并将其传入。【参考方案2】:

当我运行这个脚本时:

#Include "Base64.au3"

$Decode = _Base64Decode("cABzAA==")
ConsoleWrite($Decode & @CRLF)

我得到结果:0x70007300。基本上,这意味着有一个'70'字符(p),一个'00'字符(nul),一个'73'字符(s),'00'字符。您可以使用如下函数在 AutoIt 中轻松地重新创建此行为:

#Include "Base64.au3"

Dim $Encode = _Base64WEncode("ps")
ConsoleWrite($Encode & @CRLF)

Func _Base64WEncode($string)
    Local $result = ""
    Local $arr = StringSplit($string, "")
    For $i = 1 To UBound($arr) - 1
        $result &= $arr[$i] & Chr(0)
    Next
    $result = _Base64Encode($result)
    Return $result
EndFunc

结果是:cABzAA==

有点 hack-ish,但我会说它比完整的 Unicode 编码更受欢迎,如果这不是你所需要的。

【讨论】:

TL;DR 版本:PowerShell由于是.NET是UCS16LE(UTF16),所以默认编码为双字节。【参考方案3】:
#Include "Base64.au3"    
#include <MsgBoxConstants.au3>
#include <StringConstants.au3>

Dim $Encode = _Base64Encode(StringToBinary("ps", $SB_UTF16LE))
MsgBox(0, 'Base64 Encode Data', $Encode)

这会给你想要的:

cABzAA==

【讨论】:

以上是关于如何为 AutoIt 和 PowerShell 获得相同的 base64 编码?的主要内容,如果未能解决你的问题,请参考以下文章

Powershell - 如何为 Start-Job 预先评估脚本块中的变量

如何为asp.net 4.0编写IIS预热脚本?

如何为 UIImageview 添加弹跳动画?

如何为格式列表输出添加前缀?

如何为播放应用程序创建systemd单元文件

如何为 netbeans java 添加 jxbrowser 的许可证密钥?