Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Размер файла, каков он на самом деле =) |

28.11.2009, 02:23
|
|
Moderator - Level 7
Регистрация: 17.05.2007
Сообщений: 220
Провел на форуме: 3013539
Репутация:
441
|
|
Размер файла, каков он на самом деле =)
Собственно сел тут писякать программу шифрующую/расшифровывающую файлы по алгоритму aes. Вроде как все функции написал, прогнал тест на 128 битах текста, все тип-топ, ещё пару тестов из текстов слепленных из первого, все пашет. Загоняю текстик побольше, там какое-то интервью артиста, и получаю на выходе понятное дело хню - после шифровки+расшифровки получаю только часть текста, причем размер зашифрованного текста не удовлетворяет мои представлениям о том каким он должен быть, я естественно схватился за отладчик, и вот что получил, ещё на обработки исходного текста:
как видите текст, который есть в блокнотике не совпадает с тем что VS получила, концы различаются.
Далее ещё веселее - смотрю я на размер исходного текста, на то что выдает студия и на то сколько байт я таки считал на обработке текста, получаю такую вещь:
1) что думает студия
2) что думает винда
3) и что я думаю (складываем count и writed)
И вот ещё что: в самом конце считывание остановилось где надо, появилась буковка "я", которая как я понимаю обозначила конец файла, ибо это 0xFF, что впринципе и возвращает ifstream::get() при достижении конца файла.
Так вот кто сталкивался с такими проблемами "размера файла", и если вдруг сталкивался, то как с ними бороться или с чем хотя бы они могут быть связаны? Использовал я для обработки данных файла функции класса fstream: put, get, eof.
И ещё как оказалось, функция get не считывает например 0x1A, возвращая конец файла, поэтому то у меня и терялась часть файла при шифровании-расшифровании, вот сижу думаю какие функции использовать чтоб именно считывать все байты из файла без разбора, может кто что подскажет? (пока надумываю обратиться в сторону сишного fread, и все переписывать =( )
Последний раз редактировалось VERte][; 28.11.2009 в 02:25..
|
|
|

28.11.2009, 02:51
|
|
Участник форума
Регистрация: 20.02.2009
Сообщений: 224
Провел на форуме: 5075819
Репутация:
274
|
|
Дай исходничок, на досуге повтыкаю...
|
|
|

28.11.2009, 03:43
|
|
Moderator - Level 7
Регистрация: 17.05.2007
Сообщений: 220
Провел на форуме: 3013539
Репутация:
441
|
|
хехе, исходник, там щас черт ногу сломит ну в принципе вот http://stream.ifolder.ru/15195470, завтра если щас и с fread, fwrite не будет работать, выложу более менее норм обработанный, щас стоит только смотреть на то каким образом определяется размер файлов в студии при использовании класса fstream
зы. впринципе fread, fwrite более результативны, но fread также вылетает встретив байт 0x1A, я в замешательстве =\
pss с 0x1a все ясно, это маркер конца файла, избежать его можно считывая в бин.режиме. В принципе все робит теперь, но все же вопрос о размере файла при работе с fstream остается
вот работающий исходник http://stream.ifolder.ru/15195870, осталось только это все заоптимайзить, ещё работы на день =)
Последний раз редактировалось VERte][; 28.11.2009 в 04:01..
|
|
|

28.11.2009, 04:17
|
|
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме: 3578578
Репутация:
275
|
|
Тоже недавно столкнулся с таким поведением(непонятные байты из потока читаются). Ubuntu/g++. После долгого перерыва решил написать что-то на С++ - это оказалась лаба по криптографии - шифровщик файлов на основе простой сети Фейстеля. Возникла такая же проблема. Подумал что совсем забыл с++(не притрагивался года полтора - писал на java только) - погуглил, попробовал некоторые варианты - ничего не работало. После этого окончательно разочаровался в с++ как в языке программирования - слишком много времени на такую банальщину потратил и все безрезультатно - это просто позор для языка. Взял и переписал все на java - на это ушло времени в разы меньше чем гугление ошибки на с++. Все сразу заработало. На c# я уверен все так же реализуется без проблем.
|
|
|

28.11.2009, 04:49
|
|
Moderator - Level 7
Регистрация: 02.05.2009
Сообщений: 894
Провел на форуме: 4297091
Репутация:
2261
|
|
я на дельфе подобную фигню писал - пользовал посимвольное считывание, т.к. все остальные функции запарываются на отдельных спец\нечитаемых символах, если открывать файл как textfile.
хотя если открывать просто как file и использовать blockread - то вроде норм, хотя обрабатывать текст при этом не пробовал. Наверное норм будет, хз
как в СИ не знаю, но сложности с этим видимо есть везде
Последний раз редактировалось ErrorNeo; 28.11.2009 в 04:53..
|
|
|

28.11.2009, 12:00
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
вообще в Си есть такая классная фишка - тип char является числом со знаком.
типа
Код:
char m = 0x99;
char n = 0x20;
if (n > m)
{
printf("n>m");
}
выдаст n>m потому m будет считаться отрицательным и по этому при расчетах могут получаться неправильные значения. так что нужно всё считать в unsigned char
А на счет считывания файлов, то юзай функции бинорной работы с файлом или апишки - через CreateFile откроеш файл. через GetFileSize получиш размер и через ReadFile считаеш скока нужно.
|
|
|

29.11.2009, 00:31
|
|
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме: 3578578
Репутация:
275
|
|
2slesh
интересовал чистый c++. не си, не api.
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|