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

发布于 2024-11-29 11:58:30 字数 687 浏览 1 评论 0原文

我使用 Ward 的 AutoIt 机器代码算法集合 在 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 获得相同的结果?我猜这是一个字符编码问题。

I use Ward's AutoIt Machine Code Algorithm Collection to get base64 encoding of a string in AutoIt:

#Include "Base64.au3"

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

The result:

cHM=

PowerShell code to get the base64 encoding of the same string "ps":

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

What I got is:

cABzAA==

The result from PowerShell is what I want. How to get the same result using AutoIt? I guess this is a character encoding issue.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

任性一次 2024-12-06 11:58:30

当我运行此脚本时:

#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 式,但我想说,如果您不需要完整的 Unicode 编码,则它优于完整的 Unicode 编码。

When I ran this script:

#Include "Base64.au3"

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

I get the result: 0x70007300. Basically, this means there is a '70' character (p), a '00' character (nul), a '73' character (s), '00' character. You can easily recreate this behavior in AutoIt with a function like this:

#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

The result is: cABzAA==

Somewhat hack-ish, but I'd say it is preferred over full Unicode encoding if that's not what you will ever need.

风吹过旳痕迹 2024-12-06 11:58:30
#Include "Base64.au3"    
#include <MsgBoxConstants.au3>
#include <StringConstants.au3>

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

这将给出你想要的:

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

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

This will give what you want :

cABzAA==
风筝有风,海豚有海 2024-12-06 11:58:30

使用 ASCII 编码而不是 Unicode:

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

Use ASCII encoding instead of Unicode:

$bytes = [System.Text.Encoding]::ASCII.GetBytes($commands)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文