繁体   English   中英

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

[英]How to get base64 encoding the same for AutoIt and PowerShell?

我使用Ward 的 AutoIt 机器代码算法集合来获取 AutoIt 中字符串的 base64 编码:

#Include "Base64.au3"

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

结果:

cHM=

PowerShell 代码得到base64编码的相同字符串“ps”:

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

我得到的是:

cABzAA==

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

当我运行这个脚本时:

#Include "Base64.au3"

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

我得到结果:0x70007300。 基本上,这意味着有一个'70'字符(p),一个'00'字符(nul),一个'73'字符(s),'00'字符。 您可以使用 function 在 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==

有点骇人听闻,但我会说它比完整的 Unicode 编码更可取,如果这不是你所需要的。

#Include "Base64.au3"    
#include <MsgBoxConstants.au3>
#include <StringConstants.au3>

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

这将给你想要的:

cABzAA==

使用 ASCII 编码代替 Unicode:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM