gpt4 book ai didi

powershell - 将.EXE编码/解码为Base64

转载 作者:行者123 更新时间:2023-12-03 12:02:25 27 4
gpt4 key购买 nike

我有一个.NET exe文件,我想将其编码为Base-64字符串,然后在以后使用Powershell从Base64字符串解码为.exe文件。

到目前为止,我的会生成一个.exe文件,但是Windows无法识别该文件作为可以运行的应用程序,并且其长度始终与传递给编码脚本的文件长度不同。

我想我可能在这里使用了错误的编码,但是我不确定。

编码脚本:

Function Get-FileName($initialDirectory)
{
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$OpenFileDialog.initialDirectory = $initialDirectory
$OpenFileDialog.filter = "All files (*.*)| *.*"
$OpenFileDialog.ShowDialog() | Out-Null
$FileName = $OpenFileDialog.filename
$FileName

} #end function Get-FileName

$FileName = Get-FileName

$Data = get-content $FileName
$Bytes = [System.Text.Encoding]::Unicode.GetBytes($Data)
$EncodedData = [Convert]::ToBase64String($Bytes)

解码脚本:
$Data = get-content $FileName
$Bytes = [System.Text.Encoding]::UTF8.GetBytes($Data)
$EncodedData = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($Bytes))

$EncodedData | Out-File ( $FileName )

最佳答案

该问题是由以下原因引起的:

  • 不含Get-Content-raw将文件分割成几行,从而破坏了
  • 代码
  • Text.Encoding将二进制代码解释为文本,从而破坏了代码
  • Out-File用于文本数据,而不是二进制代码

  • 正确的方法是使用IO.File ReadAllBytes:
    $base64string = [Convert]::ToBase64String([IO.File]::ReadAllBytes($FileName))

    WriteAllBytes进行解码:
    [IO.File]::WriteAllBytes($FileName, [Convert]::FromBase64String($base64string))

    关于powershell - 将.EXE编码/解码为Base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42592518/

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