我有一个.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))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句