import base64
exe = 'c:/users/me/program.exe'
script = 'c:/users/me/newpython.py'
chunksize = 6144
linelength = 80
with open(exe,'rb') as inf, open(script,'w') as outf:
outf.write('program_data = """')
while True:
progdata = inf.read(chunksize)
if len(progdata):
progdata = progdata.encode("base64")
outf.writelines(progdata[i:i+linelength] for i in range(0, len(progdata), linelength))
else:
break
outf.write('""".decode("base64")')
Редактировать:
Идея состоит в том, чтобы обрабатывать входной файл в удобных порциях, а не считывать потенциально большой файл в память.
После base64-кодируя фрагмент, я затем разделяю его на 80-символьные строки (это просто для того, чтобы управлять им в текстовом редакторе) и записываю в вывод.
Я оборачиваю данные в program_data = "" ".. "" ".decode (" base64 ") так, что когда Python загружает файл, данные будут автоматически расшифрованы - program_data будет содержать двоичные данные, которые вы хотите.
8096 был пердеж мозга - я имел в видуиспользовать 8192 байта (8 КБ).Затем я понял, что есть вторая проблема;кодирование фрагмента, отличного от кратного 3-х длинных символов, приводит к выводу с допуском '=', который преждевременно усекает декодирование.Я изменил размер чанка на 6 КБ = 512 байт (размер блока NTFS по умолчанию) * 3 символа * 4 (произвольное число);похоже, это работает как ожидалось.
Надеюсь, это поможет!