Как получить одинаковую кодировку base64 для AutoIt и PowerShell? - PullRequest
4 голосов
/ 15 августа 2011

Я использую Коллекция алгоритмов машинного кода AutoIt Уорда , чтобы получить base64-кодирование строки в AutoIt:

#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? Я думаю, что это проблема кодировки символов.

Ответы [ 3 ]

5 голосов
/ 15 августа 2011

Когда я запустил этот скрипт:

#Include "Base64.au3"

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

Я получил результат: 0x70007300.По сути, это означает, что есть символ «70» (p), символ «00» (nul), символ (ы) «73», символ «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 ==

В некотором смысле взломать, но я бы сказал, что это предпочтительнее, чемполная кодировка Unicode, если это не то, что вам когда-либо понадобится.

2 голосов
/ 23 ноября 2017
#Include "Base64.au3"    
#include <MsgBoxConstants.au3>
#include <StringConstants.au3>

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

Это даст то, что вы хотите:

cABzAA==
1 голос
/ 15 августа 2011

Использовать кодировку ASCII вместо Unicode:

$bytes = [System.Text.Encoding]::ASCII.GetBytes($commands)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...