Как читать байты.fromhex() из файла в Python

#python #encryption #file-io #formatting #byte

#python #шифрование #file-io #форматирование #байт

Вопрос:

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

Данные шифруются из реализации DES на Python, и шифрование происходит из этого оператора return : return bytes.fromhex('').join(result) . Например, шифрование b'This' дает это в результате:

b'xc5lPx04x8cxe2xa8x05'

Затем я помещаю это шифрование в файл (открытый как «wb») с помощью out_file.write(data) .

Моя проблема в том, что когда я пытаюсь прочитать зашифрованные данные из файла, ничего не читается. Приведенный ниже код показывает, что я могу читать данные так, как я хочу, когда используется открытый текст, но не при таком форматировании зашифрованного текста. Мне нужны данные для чтения в качестве bytes типа.

 with open(filename, "rb") as in_file:
    buffer = in_file.read()

  

Используя это для файла с открытым текстом This , печать buffer выглядит следующим образом:

b'This'

Однако выполнение этого для файла с зашифрованным открытым текстом, сформированным из bytes.fromhex('') буфера печати, ничего не дает:

b''

Есть ли какие-либо предложения о том, как либо форматировать зашифрованный текст, чтобы поместить его в файл, чтобы его можно было прочитать, либо считывать данные из файла в этом конкретном формате? Я просто не понимаю, почему этот формат не интерпретируется должным образом, как bytes при чтении его из файла.

Комментарии:

1. Вы не можете закодировать свой зашифрованный текст с помощью fromhex . Зашифрованные данные содержат байты с псевдослучайными значениями. Если вы используете formhex это, вы наверняка получите потерю данных.

2. Ничто из этого не имеет никакого смысла. Прежде всего, bytes.fromhex('') это просто простой способ указать пустой bytes объект. Гораздо более чистый и короткий способ — это просто b'' . Во-вторых, infile.read() будет считываться весь файл в bytes объект, если вы открыли его с rb помощью . Возможно, вы открыли файл с wb помощью вместо rb ? В противном случае я сделаю обычный запрос: пожалуйста, предоставьте полный пример, включая параметры проблемы. Я должен иметь возможность скопировать и вставить его в свою среду разработки, запустить его и получить те же результаты, которые вы видите.

3. @MaartenBodewes шифр не был моей реализацией. Мне нужно использовать реализацию DES с открытым исходным кодом. Однако расшифровка зашифрованного текста в этой форме каждый раз дает исходный открытый текст. Я не думаю, что есть какая-либо потеря данных.

4. @PresidentJamesK. Полк как описано выше, фактическая форма данных из реализации DES такова bytes.fromhex('').join(result) . Так что это не пустые данные. Моя проблема в том, что я не могу прочитать байты из файла, когда он помещен туда уже в bytes формате

5. Пожалуйста, внимательно перечитайте то, что я написал.