Как сделать свой формат файла
Перейти к содержимому

Как сделать свой формат файла

  • автор:

Как создавать свои форматы файлов для криптографии?

Приветствую всех кто помогает таким новичкам, как я на Хабр Q&A.
Недавно я заинтересовался в каком-то вопросе о смысле шифрования и криптографии, не в буквальном смысле, а немного иначе и перебрал около 12 статей на разные темы по крупицам вычленяя какую-либо полезную мне информацию.

Вопрос обстоит такой:
Как создаются и если есть уникальное решение на подобии отдельного языка программирования используемого под такую задачу как формат файлов, мне интересно поэкспериментировать с созданием своего собственного формата файла, но в рамках того, чтобы различные ОС, как минимум Windows, MacOS, Linux могли конвертировать бинарный код этих форматов, распознать и использовать их.

Из этого вытекает другой под-вопрос, насколько целесообразно «создавать» / «разрабатывать» отдельный формат файла в целях использования его в криптографии и особенно шифровании?

Вопрос скорее экспериментальный нежели совсем серьёзный, но отнюдь от такого не без интереса лежит, а информации по нему найти мне не вышло, поэтому благодарю заранее за помощь!

  • Вопрос задан 24 июн. 2023
  • 158 просмотров

5 комментариев

Простой 5 комментариев

Nipheris

насколько целесообразно «создавать» / «разрабатывать» отдельный формат файла в целях использования его в криптографии и особенно шифровании?

какую практическую задачу вы хотите решить? Как из неё вытекает разработка формата файла? Вы не рассказали ничего, но хотите услышать ответ.

Nipheris

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

Что ещё за отдельный язык? Вы можете более доходчиво вопрос сформулировать?

TimeForFlash

Александр Лукиянов @TimeForFlash Автор вопроса

Станислав Макаров, конкретной задачи не стоит, более точно я могу объяснить свой вопрос примером .ssh , вопрос стоит в создании для примерно таких же целей своего типа файла, который бы позволял уменьшить риск потери/перехвата данных, насколько это нужно и возможно?
Опять же, я совсем профан в этом, поэтому вопрос экспериментальный и скорее любознательный.

Saboteur @saboteur_kiev Куратор тега Информационная безопасность
Еще более непонятно что за формат файла .ssh, насколько я знаю такого формата не существует.

CityCat4

CityCat4 @CityCat4 Куратор тега Информационная безопасность

Вопрос скорее экспериментальный нежели совсем серьёзный

В этом «вопросе» нет никакого вопроса. Есть какое-то непонятное блабла про «формат файлов». Формат файлов — вещь совершенно вторичная, его можно придумать любым, соверенно любым.

Назовите пожалуйста задачу, которую хотите решить. Пусть даже она будет совершенно бредовая, нубская и сто тыщ раз заезженная, типа «хочу написать свой супер-пупер-защищенный мессенджер».

Файлов .ssh не существует. Есть ssh — программа удаленного управления с шифрованием.

Решения вопроса 1

mayton2019

mayton2019 @mayton2019
Bigdata Engineer

Существуют стандартные файловые форматы для хранения ЭЦП ключей. Для RSA, PGP и прочее.
Это текстовые файлы оформленные соотв образом и хранящие внутри себя закодированный
в Base64 ключ. Это то что касается публичной части криптографии там где важно оповестить
как можно больше респонентов и где нужна открытость. Я также видел аналогичные XML-форматы
в эпоху SOAP. Но они как-то не особо популярны. Они скорее часть SOAP чем криптографии.

В симметричной криптографии задач файловых форматов вобщем-то не стоит. Даже более
того. Если условные Алиса и Боб решили наладить секретную переписку — то им не нужен
никакой файловый стандарт. Они — в контексте и будут передавать блочно-шифрованную
информацию безо всякого формата без хедера и без магических чисел.

Что еще. Для этой-же симметрички может быть полезен padding. Это специальное оформление
последнего блока шифро-текста. Чтоб подбить вариативный размер файла под размер кратный
блоку. Например если вы решили шифровать через AES-256 то вам нужен блок в 256 бит
и алгоритм паддинга для хвостового блока. Padding известен и его методы описаны в wiki.
Берите перебирайте. Который совпадет — тот и ваш. Вот. Паддинг — это не файловый формат
а просто инженерный трюк чтоб уйти от блоков или прийти к блокам.

Как создать свой формат файла или как сохранить 300 вопросов с вариантами в одном файле?

Нужно сохранить 300-500 вопросов с 5 вариантами в одном файле так, чтобы легко достать случайные 25 вопросов с (перемешанными)вариантами. В текстовом файле не получится — в тесте может быть картины, формулы. Как быть? Для открытия теста будет написано специальная программа. Моя задача: генерировать из ms word тест-файл, если понадобится в новом формате. Я в этом абсолютно ничего не знаю. В каком направлений двигаться? О чем надо читать?
P.S. «Генератор-сайт» будет написано на php

  • Вопрос задан более трёх лет назад
  • 5255 просмотров

1 комментарий

Оценить 1 комментарий

c_pro_lang

Непрограммистсоченьдлиннымимен @c_pro_lang Автор вопроса

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

Решения вопроса 5

Не вижу проблем с хранением всего в JSON-файле с кодированием бинарных данных в Base64 (так изображения хранить проще простого; про формулы в конце). JSON парсить в php (да и вообще) – проще некуда. Сохранение в JSON-файл из *.doc/docx можно реализовать макросом-скриптом на Visual Basic за половину рабочего дня.
Если не планируется какое либо распространение этого софта и заранее известно окружение (например система тестирования в университете с определенной версией MS Office =) ), то можно использовать автоматизацию приложений MS Office. Насколько помню, на том же Delphi довольно просто прикручивался кастомный GUI к документу MS Office при наличии хоть какого опыта работы с технологией COM. В таком случае достаточно будет лишь правильно разметить документ. С веб-версией, в случае ее необходимости, придется обращаться к .NET-платформе (хотя наверняка в MSDN уже есть мануал с сорцами на эту тему).
И стоит напомнить: *.docx – это не более чем переименованный *.zip с файлами в xml-формате. Не знаю как там хранятся изображения, но парсить распакованную структуру не должно составить большого труда средствами любого языка программирования.
Что является формулами я не смог понять из вопроса. Если объекты *math* или как там в MS Office они зовуться, то тут нужно искать решение. Например отрендерить предварительно =)). Вроде когда из .docx импортировали в *.doc для Office 2003 так и было.

Ответ написан более трёх лет назад
Комментировать
Нравится 5 Комментировать
Full-stack developer (Symfony, Angular)

Сделайте все в разных файлах и соберите в zip, как это делается в docx/xlsx. Это из простых вариантов.

как создать свой формат файла

, Мне надо для работы новый исполняемый формат файла, к примеру file.qwerty но вел себя как файл exe я немного поковырялся в реесторе и вот что собрал Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\MYFORMATfile\shell\open\command] @=» \»%1\» %*» ДАЛЬШЕ я в нес изменения через батник assoc .qwerty=.MYFORMATfile от имени админа, но в итоге не получил никаких изменений

Лучший ответ
Придётся на коленке под тот формат и ось как-нить сбацать
Остальные ответы

Не знаю, но хочу натолкнуть на парочку сомнений. Первое это не уверен что винда при запуске не проверяет какой формат файла она открывает! Существует досовские exe, виндовсовские exe x32, exe x64, bat файлы. И все они как я понимаю проходят проверку на запуск. А вы подсовываете хрен знает что. Второе это то что exe имеют в описании некоторую информацию для их запуска, и опять же винда знает где ее читать а ваш формат для нее хз что. Если хотите создать все таки, то надо для начала создать программу типа загрузчика которая будет ваш файл загружать в оперативу и передавать ей управление настраивая все внешние переходы на библиотеки (user32, kernel32, gdi и т. п.). И в реестре прописать чем открывать такие файлы!

Ares СистемаУченик (127) 6 лет назад

подскажи а есть ли на винде уже существующий формат типа .exe или .com
такой же исполняющий но с собственной веткой реестора

Как создать уникальное расширение файла.

Я хочу использовать для хранения файлов особое уникальное расширение. Например .gqv1 для хранения тестов. В таком файле должен содержаться текст и несколько изображений, а ещё точнее массив символов, массив байт и массив ImageIcon.

Пользователь при помощи моего приложения может создать тест определённого формата, написать вопросы, указать цену/сложность каждого вопроса, тест в виде дерева с разветвлениями.
Программа сохранит тест в файле с расширением, например .gqv1, потом тест можно будет запустить и пройти. В файле будут сохраняться результаты, как бы таблица рекордов по прохождению этого теста.

Главный вопрос:
Как создать файл с любым расширением и уникальной кодировкой, и как сделать программу, расшифровывающую эти файлы.

Если нужно дополнительное описание вопроса — спрашивайте, уточню.

Лучший ответ

Я так понимаю, вопрос должен звучать «как создать собственный формат файла? «.
Ничего сложного. просто придумываешь структуру формата (заголовочную часть, секции, как всё это различать и тд. А затем просто записывает все нужные данные в файл, придерживаясь придуманного формата.

Более лёгкий путь — по сути, то. что ты хочешь, можно сделать, тупо поместив все нужные файлы + файл-описание внутрь zip архива (просто с другим расширением, не zip). Таким образом организован вордовский формат .docx например, можешь открыть любой документ ворда в архиваторе и посмотреть, как он устроен.

asia4 АзияГуру (3550) 7 лет назад

Если у меня в общем-то готова структура формата:
Заголовочная часть — это название теста и раздел к которому он относится.
Есть 3 секции:
1. Вопросы и их параметры — массив объектов.
2. Схема теста, хранит ссылки на объекты вопросов, действия при неправильном ответе и правильном.
3. история использования теста, версии теста и таблица рекордов по его прохождению.
Я уже сделал программу, она может создавать тест и работать с ним, но нужно работать не с одним тестом, а сохранять тест в файл и загружать из него.

Рыба-катала Мыслитель (6378) Вы что хотите-то? Чтобы вам всё разжевали до самого примитивного уровня? Что конкретно вызывает у вас затруднение? Файл создавать умеете? байты в него записывать умеете? О сериализации/десериализации слышали? Если не слышали — погуглите.

Kir SwУченик (100) 5 лет назад

Вот используйте моё приложение оно даёт вам возможность сделать собственное расширение и поместить в него текст.
https://drive.google.com/file/d/1ZM0k90qvQO4DCGlgUxltnnK8QsLqvJtr/view?usp=drivesdk

Снюс 2009Ученик (149) 2 года назад
Я создал файл со своим типом, и архив пишет что файл повреждён, неизвестный формат
Остальные ответы

как насчёт зашифровать поток данных любым популярным криптоалгоритмом?
есть туева хуча библиотек под любой язык

Для начала — продумать формат, в котором всё это будет храниться)
asia4 АзияГуру (3550) 7 лет назад

Ну я уже сделал программу, она может создавать тест и работать с ним, но нужно работать не с одним тестом, а сохранять тест в файл и загружать из него.

Лайт Ягами Искусственный Интеллект (277999) Вот и продумать формат, в котором этот тест будет записываться в файл, чтобы можно было сохранить его, а потом восстановить)

Я могу привести пример моего приложения с моим уникальным расширением для файла. Написано на Pascal. Файл olsf ничем не отличается от txt, но olsf открывается только с данного приложения.

uses System.Windows.Forms, System.Drawing;

const
TextFileExt = ‘olsf’;
TextFileIcon = ‘D:\Documents\IconsFiles\Файл OLS.png’;
TextFileFilter = ‘OLS Files (*.’+TextFileExt+’)|*.’+TextFileExt;

var
myForm: Form;
TextBox1: TextBox;

procedure SaveFile(FileName: string);
begin
//Создаем файловый поток с кодировкой Windows 1251, необходимо для корректного сохранения русских букв
var f := new System.IO.StreamWriter(FileName, false, System.Text.Encoding.Default);
f.Write(TextBox1.Text);
f.Close;
end;

procedure OpenFile(FileName: string);
begin
//Создаем файловый поток с кодировкой Windows 1251, необходимо для корректного чтения русских букв
var f := new System.IO.StreamReader(FileName, System.Text.Encoding.Default);
TextBox1.Text := f.ReadToEnd;
f.Close;
end;

procedure FormClose(sender: object; args: System.EventArgs);
begin
myForm.Close;
end;

procedure MenuSaveClick(sender:object; args:System.EventArgs);
begin
//Диалог для выбора файла
var sd := new SaveFileDialog;
//Расширение поумолчанию
sd.DefaultExt := TextFileExt;
//Фильтр для диалга
sd.Filter := TextFileFilter;
if sd.ShowDialog=DialogResult.OK then
//если результат выполнения sd.ShowDialog это нажатие кнопки подтверждения то
SaveFile(sd.FileName);
end;

procedure MenuOpenClick(sender:object; args:System.EventArgs);
begin
var sd := new OpenFileDialog;
sd.DefaultExt := TextFileExt;
sd.Filter := TextFileFilter;
if sd.ShowDialog = DialogResult.OK then
OpenFile(sd.FileName);
end;

begin
myForm := new Form;
myForm.Text := ‘OLS Editor’;
myForm.Icon := new Icon(‘С: \Documents\OrdLeaderScript\Editor\icon.ico’);

TextBox1 := new TextBox;
TextBox1.Multiline := True;
TextBox1.Height := 100;
TextBox1.Dock := DockStyle.Fill;
//Полосы прокрутки
TextBox1.ScrollBars := ScrollBars.Both;
//Устанавливаем шрифт
TextBox1.Font := new System.Drawing.Font(‘Consolas’,12);

//Создаем меню
var toolStrip1 := new ToolStrip;
toolStrip1.GripStyle := System.Windows.Forms.ToolStripGripStyle.Hidden;
var miFile := new ToolStripMenuItem(‘Файл’);
miFile.DropDownItems.Add(new ToolStripMenuItem(‘Открыть’, new System.Drawing.Bitmap(GetResourceStream(‘Open.png’)),MenuOpenClick));
miFile.DropDownItems.Add(new ToolStripMenuItem(‘Сохранить как. ‘,new System.Drawing.Bitmap(GetResourceStream(‘Save.png’)),MenuSaveClick));
miFile.DropDownItems.Add(new ToolStripMenuItem(‘Выход’,nil,FormClose));
toolStrip1.Items.Add(miFile);
myForm.Controls.Add(toolStrip1);

//Посмотрим в аргументы командной строки
//Если их количество = 1, то открываем
if CommandLineArgs.Length = 1 then
OpenFile(CommandLineArgs[0]);

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *