Разница между python2 и python3 в функции декодирования

Недавно я посмотрел видео о написании кода для декодирования заголовка и содержимого файла из десятичных чисел в строки. Однако он написан на python2, поэтому я решил переписать код на python3. К сожалению, у меня возникают проблемы с расшифровкой содержимого изображения.

Это исходный код на python2:

#!/usr/bin/env python

import os

directory = '1262404985085867488371'

def decrypt(number): 
    return hex(int(number))[2:].replace("L","").decode("hex")


os.chdir(directory)
for i in os.listdir('.'):
    try:
        print(decrypt(i))
        c = open(i).read()
        open(decrypt(i),'w').write(decrypt(c))
        #o.write(decrypt(c))

    except:
        print("FAILED WITH",i)

И это код, написанный на python3:

#!/usr/bin/env python3

import os

directory = '1262404985085867488371'

def decrypt(number): 
    hex_num = hex(int(number))[2:].replace("L","")
    return  bytes.fromhex(hex_num).decode("ascii")


os.chdir(directory)
for i in os.listdir('.'):
    try:
        print(decrypt(i))
        c = open(i).read()
        open(decrypt(i),'w').write(decrypt(c))
        #o.write(decrypt(c))

    except:
        print("FAILED WITH",i)

Может ли кто-нибудь помочь мне посмотреть, как я могу решить эту проблему? Это проблема:

My computer got infected with ransomware and now none of my documents are accessible anymore! If you help me out, I'll reward you a flag! https://static.tjctf.org/7459b0c272ba30c9fea94391c7d7051d78e1732c871c3a6f27070fcb34f9e734_encrypted.tar.gz

По сути, я попытался изменить ascii на utf-8 и открыть файл с режимом «wb» или «rb», но ни один из них не работает ...

у вас есть ошибки? если да, включите их.

davedwards 15.08.2018 06:39

Если вы можете включить любую другую информацию, чтобы мы могли воспроизвести проблему, было бы полезно, например создать минимальный, полный и проверяемый пример

davedwards 15.08.2018 06:41

редактирование вашего кода с заглавной буквы в переменной directory действительно ли нет улучшает форматирование кода. Синтаксис python поддерживает переменные в нижнем регистре.

davedwards 15.08.2018 06:50

@davedwards Хорошо. Спасибо. Я впервые использую переполнение стека, поэтому я еще не слишком хорошо знаком с синтаксисом. Кстати, я перередактировал, чтобы указать источник моей проблемы.

AppleByte 15.08.2018 06:58

не беспокойся, спасибо. но эта ссылка защищена именем пользователя и паролем, поэтому мы не можем видеть то, что вы видите, изображение, описание проблемы или содержание.

davedwards 15.08.2018 07:08

Хорошо. Позвольте мне попытаться разместить вопросы и ссылку здесь !!

AppleByte 15.08.2018 07:12

хорошо, только не публикуйте конфиденциальную или безопасную информацию. благодаря.

davedwards 15.08.2018 07:12

Хорошо. Это просто соревнование по компьютерной безопасности, проводимое старшей школой, которое открыто для публики через Интернет.

AppleByte 15.08.2018 07:15

Я мало знаю о проблеме, с которой вы столкнулись, но когда я извлек этот файл tar.gz, с которым вы связались, есть файл HAHAHA.txt, который включает "All your files have been encrypted with a uncrackable algorithm. You are now screwed forever.". Вы действительно думаете, что это безопасный вызов? Я был бы очень осторожен. тем более что в ваш вопрос входит "My computer got infected with ransomware "

davedwards 15.08.2018 07:20

Да, конечно. Обычно названия файлов и их содержимое зашифрованы десятичными числами. И мой код предназначен для декодирования его в строки.

AppleByte 15.08.2018 07:23

Хорошо, круто, просто убедился.

davedwards 15.08.2018 07:23

Для этого задания есть 1 видео-запись. youtube.com/watch?v=m9FuGso8BE8

AppleByte 15.08.2018 07:24

Хм, интересно. Для меня это не вызывает никаких ошибок, пока я получаю только пустые файлы. Похоже, это связано с Расшифровать шестнадцатеричную строку в Python 3 или Преобразование (декодирование) шестнадцатеричной строки в ASCII или любой другой понятный формат, но я пока не могу его решить, буду пытаться и обновлять с любым успехом.

davedwards 15.08.2018 08:38

Да, для меня это тоже не вызывает ошибок. По сути, у меня были пустые файлы при компиляции с использованием кода python3, но я получил файлы изображений при компиляции с использованием кода python2. Я думаю, что, возможно, проблема заключается в записи байтового объекта или чего-то еще в файл, потому что функция дешифрования действительно отлично работает с именем файла. Это не удается только во время записи преобразования в содержимое файла. Я попытался отладить свой код и обнаружил, что проблема в этой строке, когда функция дешифрования вызывается с аргументом c. открыть (дешифровать (я), 'ш'). написать (дешифровать (с))

AppleByte 15.08.2018 09:41

Возможно, это из-за новой строки или из-за функции read (), и я попытался заменить новую строку пустой строкой, но она все еще не работает ...

AppleByte 15.08.2018 09:55
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
15
175
1

Ответы 1

Я собираюсь перейти здесь к делу, и, поскольку вы не включили никаких примеров и \ или ошибок, я предполагаю, что вы получили такую ​​ошибку:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 0: ordinal not in range(128)

Это вызвано каталогом file \ с именем Unicode, который, в свою очередь, вызывает это исключение, когда вы пытаетесь декодировать с помощью ascii, как в decode("ascii").

Вместо этого попробуйте декодировать с помощью «utf-8».

На самом деле я пробовал это раньше, но это все еще не работает. Я думаю, может быть, это как-то связано с байтовым объектом.

AppleByte 15.08.2018 07:03

Это здорово, поэтому, если вы уже что-то пробовали, включите это в вопрос, чтобы мы могли сосредоточить нашу помощь вместо того, чтобы делать предположения: P

bergerg 15.08.2018 07:04

Другие вопросы по теме