|
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
|
||||||
Как во время побайтового чтения файла заменять его содержимое?17.05.2021, 19:27. Показов 2586. Ответов 12
Здравствуйте.
Не по теме: Есть задача написать программу шифрования любых файлов алгоритмом AES. Собственно вопрос. Как во время побайтового чтения файла заменять его содержимое большим количеством байт? Допустим имеется файл размером 13 байт. Я считываю файл в цикле по 10 байт, потом я создаю рандомный массив байтов размером 10-20 байт и хочу заменить эти 10 байт новым массивом. Проблема в том, что новый массив больше исходного. Что делать в таком случае? Вот простой пример кода.
0
|
||||||
| 17.05.2021, 19:27 | |
|
Ответы с готовыми решениями:
12
Как определить время чтения данных из файла в миллисекундах? Создать правило для чтения данных из файла. Вывести содержимое файла Вывести содержимое файла (с помощью чтения) на экран |
|
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
|
|
| 17.05.2021, 22:26 [ТС] | |
|
Нет проблем с перезаписью байтов в файле того же размера, они возникают когда нужно перезаписать байты большего размера.
0
|
|
|
Администратор
|
|
| 18.05.2021, 01:45 | |
|
Nalik, AES работает с блоками кратного размера. Дай ему на входу 16 байт и на выходе будет столько же. Создайте массив размера с размером кратным 16 и с ним работайте (работать по 10 или 16 будет медленно). Сначала прочитали нужный кусок из файла, зашифровали (TransformBlock), вернули указатель файла назад, записали. Повторяем до конца файла. Единственное что последний блок нужно не забыть пропустить через TransformFinalBlock.
1
|
|
|
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
|
|||||||||||
| 18.05.2021, 04:02 [ТС] | |||||||||||
|
OwenGlendower, да я уже протестировал скорость работы с маленькими блоками и большими. В примере старался все максимально упростить. Потому указано 10 байт чтение и 13 байт весь файл. Завтра попробую ваше решение, спасибо. Почему-то в интернете не нашёл как это можно сделать, везде предлагается либо создавать временный файл, либо считывать файл в ОЗУ. Надеюсь ваше решение поможет)
Добавлено через 2 часа 10 минут Набросал на коленке, не уверен, что правильно, но похоже получилось. Если я правильно понимаю TransformFinalBlock возвращает зашифрованные данные + iv? Кликните здесь для просмотра всего текста
Тогда я не пойму как мне брать iv при декодирование файла? Под отладкой начал писать функцию расшифровки по аналогии с функцией шифрования, но тут же столкнулся с проблемой, что CreateDecryptor выбивает исключение System.Security.Cryptography.Cryptograph icException: "Указанный режим шифрования требует использования вектора инициализации (IV)." Кликните здесь для просмотра всего текста
0
|
|||||||||||
|
Администратор
|
|||
| 18.05.2021, 10:47 | |||
|
1
|
|||
|
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
|
||||||||||||
| 18.05.2021, 12:29 [ТС] | ||||||||||||
|
Если я правильно понимаю в TransformBlock и TransformFinalBlock уже происходит шифрование блоков? Правильно написан код?
Если утрировать, то получается TransformBlock используется для преобразования блоков фиксированного размера (например по 16 байт), а TransformFinalBlock для преобразования последнего блока, так как он может быть Добавлено через 1 час 0 минут Еще один вариант. Вычитал, что CryptoStream автоматически вызывает правильные ICryptoTransform методы. С расшифровкой пока проблемы ![]()
0
|
||||||||||||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,569
|
|||||||||||
| 18.05.2021, 13:02 | |||||||||||
Сообщение было отмечено Nalik как решение
Решение
1
|
|||||||||||
|
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
|
|
| 18.05.2021, 13:26 [ТС] | |
|
Someone007, спасибо. Буду разбираться, почему у меня не получалось.
0
|
|
|
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
|
||||||
| 19.05.2021, 15:23 [ТС] | ||||||
|
Someone007, а не подскажите как правильно получить HMAC при побайтовом шифровании? Ведь я не храню в памяти весь файл, а читаю его по блокам. Достаточно ли будет применить HMAC только допустим к первому зашифрованному блоку размером примерно 2 мб или это будет не безопасно?
0
|
||||||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,569
|
|
| 19.05.2021, 15:27 | |
|
Там же есть перегрузка, принимающая Stream...
1
|
|
|
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
|
|||||||
| 19.05.2021, 19:31 [ТС] | |||||||
|
Someone007, точно. Спасибо. Правда пришлось добавить поток с доступом чтения)
То есть если в файле был текст "test" то после шифрования будет "test祾る搄⋪穠浏". Добавлено через 7 минут Someone007, вообще я хочу сделать определение через HMAC правильный ввод ключа без потери времени на расшифровку и выдачу исключения. Идея была такая: при шифровании я получаю хеш уже зашифрованных данных функцией HMAC. При расшифровке я сначала проверяю правильность ключа через HMAC и если он верен расшифровываю данные. Добавлено через 3 часа 24 минуты Печалька, функция HMACSHA256.ComputeHash работает дольше чем само шифрование/дешифрование. Шифрование/дешифрование файла размером почти 6 Гб работает около 10-13 секунд, а получение хеша около 50 секунд. Все таки насколько будет страдать безопасность если брать первые 2 мб от файла и прогонять их в HMACSHA256.ComputeHash , потом полученный хеш заносить в зашифрованный файл чтобы в дальнейшем при дешифровке просто сверять хеш тем самым проверяю правильный ли используется ключ? P.s. Если не рассматривать вариант брута ключей через хеш. И вообще насколько безопасно впринципе хранить в зашифрованном файле хеш зашифрованного файла полученного через HMACSHA256.ComputeHash?
0
|
|||||||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,569
|
|
| 19.05.2021, 21:28 | |
|
Если вам нужно просто дополнительный хэш для быстрой проверки корректности ключа, то весь файл действительно нет смысла хэшировать. Можно вообще хэш ключа хранить разбавив его солью...
0
|
|
|
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
|
|
| 19.05.2021, 21:32 [ТС] | |
|
Someone007, да только это. Только тут еще интересен вопрос безопасности такого хранения. Я создал новую тему Безопасно ли хранить HMAC в зашифрованном файле? , так как в рамках этой проблема решена. Спасибо
0
|
|
| 19.05.2021, 21:32 | |
|
Помогаю со студенческими работами здесь
13
Копировать содержимое одного указанного файла в другой указанный файл, дописывая, а не стирая его содержимое Как отослать письмо, взяв его содержимое из файла? Можно ли как-то стереть всё содержимое файла, не закрывая его, fstream как перенести данные (объект и его содержимое) из одного файла js в другой файл js Как заменять файл при его наличии в папке? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|