gpt4 book ai didi

powershell - 使用 VBScript 将 Unicode 字符串编码为 Base64

转载 作者:行者123 更新时间:2023-12-03 00:35:55 26 4
gpt4 key购买 nike

我想将 powershell 命令(字符串 (get-date).date )编码为 base64,以便通过 powershell -encodedcommand xxx 运行它.

使用标准 VBS 方法(甚至 https://www.base64encode.org/ )我得到 KGdldC1kYXRlKS5kYXRl哪个不运行。

使用以下 powershell 脚本:

$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)

我得到 KABnAGUAdAAtAGQAYQB0AGUAKQAuAGQAYQB0AGUA哪个有效。不同之处似乎在于该命令首先被编码为 Unicode 字节。

任何人都可以提供一个 VBS 函数来执行此操作或 Unicode.GetBytes() 的 VBS 等效项,以便我们可以获得正确的字符串编码吗?

最佳答案

PowerShell 仅接受 的 Base64 编码UTF-16 LE 编码 用它的字符串-EncodedCommand范围。
UTF-16 LE 是什么 Unicode代表 [System.Text.Encoding]::Unicode ,并且它将绝大多数 Unicode 字符(代码点)编码为每个两个字节;它也是 VBScript 和 PowerShell 内部使用的字符串编码。

相比之下,大多数 VBScript 解决方案使用单字节 ASCII 编码,甚至是其他值得称赞的 Unicode 感知 https://www.base64encode.org/仅提供基于 UTF-8 的编码(主要是西方语言的单字节编码,带有其他语言的字符。表示为 2-4 个字节)。

这里是 强大的基于 UTF-16 LE 的 Base64 编码解决方案 .

我发布了一个更模块化的变体,它可以选择支持 UTF-8 here ;两个位置的代码都基于 this great answer .

示例 称呼:

Base64EncodeUtf16Le("(get-date).date") ' -> "KABnAGUAdAAtAGQAYQB0AGUAKQAuAGQAYQB0AGUA"

来源 代码:帽子提示 MC ND帮助简化解决方案。

' Base64-encodes the specified string using UTF-16 LE as the underlying text
' encoding.
Function Base64EncodeUtf16Le(ByVal sText)

Dim bytesUtf16Le

' Create an aux. stream from which we can get a binary (byte array)
' representation of the input string in UTF-16 LE encoding.
With CreateObject("ADODB.Stream")
' Create a UTF 16-LE encoded text stream...
.Type = 2 ' adTypeText
.Charset = "utf-16le"
.Open
.WriteText sText
' ... and convert it to a binary stream,
' so we can get the string as a byte array
.Position = 0
.Type = 1 ' adTypeBinary
.Position = 2 ' Skip BOM
bytesUtf16Le = .Read
.Close
End With

' Use an aux. XML document with a Base64-encoded element.
' Assigning a byte stream (array) to .NodeTypedValue
' automatically performs Base64-encoding, whose result can then be accessed
' as the element's text.
With CreateObject("Msxml2.DOMDocument").CreateElement("aux")
.DataType = "bin.base64"
.NodeTypedValue = bytesUtf16Le
Base64EncodeUtf16Le = .Text
End With

End Function

关于powershell - 使用 VBScript 将 Unicode 字符串编码为 Base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40112335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com