Разместите нашу кнопку!

Новые статьи:

Programming articles

Создание сайтов на шаблонах

Множество вариантов работы с графикой на канве

Шифруем файл с помощью другого файла

Перехват API функций - Основы

Как сделать действительно хороший сайт

Создание почтового клиента в Delphi 7

Применение паскаля для решения геометрических задач

Управление windows с помощью Delphi

Создание wap сайта

Операционная система unix, термины и понятия

SQL враг или друг

Возникновение и первая редакция ОС UNIX

Оптимизация проекта в Delphi

Ресурсы, зачем нужны ресурсы

Термины программистов 20 века

Советы по созданию собственного сайта с нуля

Шифруем файл с помощью пароля

Фракталы - геометрия природы

Crypt - Delphi программа для шифрования

Рассылка, зачем она нужна и как ее организовать?

Учебник по C++ для начинающих программистов

Уроки для изучения ассемблера

Загадочный тип PCHAR

Средства по созданию сайтов

Операторы преобразования классов is и as

Borland Developer studio 2006. Всё в одном

Создание базы данных в Delphi, без сторонних БД


Software engineering articles



Архив рассылки

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

22 выпуск

КЛУБ ПРОГРАММИСТОВ

в рассылке статьи, ссылки, инфо и многое другое о программировании и программистах

Новости

Лабораторные работы

Справочники

Книги

Основы Delphi

Клуб

Чат

Форум

От ведущего

Добро пожаловать на 22 выпуск Клуба программистов. Сегодня у меня хорошие новости. А именно: в Клубе наконец-то обновление! Новые статьи добавлены. о них читайте в рубрике. Также сегодня хороший юмор о программистах :)

Ну а на десерт вам предлагаю почитать статью: шифрование файла с помощью другого файла.

__________________________________________________________

 

Шифрование файла с помощью другого файла

Здравствуйте, уважаемые читатели моей очередной статьи.

    В прошлой статье я вам рассказывал, как можно зашифровать файл с помощью пароля . Разумеется, чем длиннее пароль, тем труднее расшифровать файл. Давайте попробуем сосчитать, сколько времени нам потребуется на расшифровку такого файла. Допустим, что если пароль имеет размер 10 символов и допустим, что если мы попробовали расшифровать файл с верным паролем, то мы сразу поймём что это файл оригинальный (хотя это условие не обязательно потому что, расшифровывая файл мы не знаем что должно быть в оригинале, но в данном случае мы знаем что в оригинале и нам надо узнать только пароль).

    Сосчитаем:
    Один символ пароля может принимать примерно 160 значений это примерно столько значений, сколько мы можем ввести с клавиатуры (26 +26 английский алфавит, 33+33 русский алфавит + ~22 дополнительный символы+10 цифр).
    Следовательно, количество попыток равно 160 в степени 10 это число 5766503906250000000000, и если за одну секунду делается 10 попыток, то нам потребуется 24610789412122 лет чтобы узнать пароль и это с тем учётом, что мы знаем длину пароля. Почти невозможно…. Это только, кажется что сложно. Но даже если пароль имеет 30 символов, а файл 1 МВ, то, имея некоторую сноровку можно заметить повторы через каждые 30 байт, а там и найти пароль нетрудно. >
    Единственный выход это увеличивать длину пароля. А что если пароль будет представлять собой файл длиной несколько сотен килобайт. Объясняю для тех, кто не понял. Символы для пароля мы брать из файла, и теперь уже каждый символ пароля будет принимать не только 160 значений, а все от 0 до 255, т.е. 256 значений, а длина пароля будет равна размеру файла в байтах.
    Итак, перейдём к практике. В процедурах шифровки расшифровки я буду использовать технику файлового мэпинга. Мы все знаем что когда программы используют слишком больше памяти чем есть на компьютере, то система сбрасывает лишнюю память на диск в файл подкачки. А когда происходит попытка обращения к сброшенной памяти, то система загружает с диска память обратно, а другую память, которая давно не использовалась, скидывает на диск. А при использовании техники мэпинга, мы как будто говорим системе, что данную область памяти не надо выгружать в файл подкачки, а надо выгружать в нужный нам файл. При создании такой области памяти мы файл полностью отображается на память, и при изменении этой области памяти изменяется файл.
    Для увеличения скорости работы процедуры шифровать (и расшифровывать) я буду в ассемблерных вставках. А работать с файлами используя ассемблер очень трудно, поэтому я и использую мэпинг потому что файлы отображаются на память. А работать с памятью на ассемблере легче.
    Чтобы создать область памяти надо сначала создать mapped объект с помощью функции CreateFileMapping. Вот описание функции из MS SDK

HANDLE CreateFileMapping(
HANDLE hFile,// хендл файла для мэпинга
LPSECURITY_ATTRIBUTES lpFileMappingAttributes,//атрибуты безопасности
DWORD flProtect,//флаги доступа к объекту
DWORD dwMaximumSizeHigh,//максимальный размер (старший)
DWORD dwMaximumSizeLow,//максимальный размер (младший)
LPCTSTR lpName //имя объекта
);

     Для того чтобы отобразить файл на память используется функция MapViewOfFile

LPVOID MapViewOfFile(
HANDLE hFileMappingObject,//хендл созданного объекта
DWORD dwDesiredAccess,// уровень доступа
DWORD dwFileOffsetHigh,//смещение начала проецирования (старшее)
DWORD dwFileOffsetLow,// смещение начала проецирования (младшее)
DWORD dwNumberOfBytesToMap// размер проецирования
);
    Эта функция возвратит начальный адрес мэпинга, т.е. возвратит адрес первого байта файла в памяти. Короче смотрим всё на примере.

Function FlCriptFile(
SourceFile:string;
DestFile:string;
PSWFileName:string;
Flags:DWORD
):boolean;
var
  DestHFile,SourceHFile,PSWHFile,BackupHFile:THandle;
  SourceMH,PSWMH:THandle;
  SourceFileSize,PSWSize:DWORD;
  SourceMMFAddr,PSWMMFAddr:pointer;

begin
  Result:=False;
  
  ACF_AutoRename :=(Flags and CF_AutoRename) = CF_AutoRename;
  ACF_DeleteSource :=(Flags and CF_DeleteSource) = CF_DeleteSource;
  ACF_Dest_NOT_CREATE:=(Flags and CF_Dest_NOT_CREATE)= CF_Dest_NOT_CREATE;
  ACF_ShowProgress :=(Flags and CF_ShowProgress) = CF_ShowProgress;
   //пользуемся теми же флагами что в предыдущей статье
  if ACF_AutoRename then
  begin
    DestFile:=SourceFile+'.cript';
    ACF_Dest_NOT_CREATE:=false;
  end;
   if ACF_Dest_NOT_CREATE then
   begin
     DestFile:='D:D9D8F57C3274EF3A6E7C5D5B27ADCF0.dat';
     ACF_DeleteSource:=false;
  end; //думаю что это понятно

SourceHFile:=CreateFile(pchar(SourceFile),GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,0,0);
if SourceHFile=INVALID_HANDLE_VALUE then Exit;
SourceFileSize:=GetFileSize(SourceHFile,nil);
CloseHandle(SourceHFile);
{открываем, получаем размер исходного файла, закрываем файл}

PSWHFile:=CreateFile(pchar(PSWFileName),GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,0,0);
if PSWHFile=INVALID_HANDLE_VALUE then Exit;
PSWSize:=GetFileSize(PSWHFile,nil);

DeleteFile(BackupFileName);
{удаляем промежуточный файл если он есть и копируем исходный файл в него, задайте имя исходного файла в разделе const}
CopyFile(pchar(SourceFile),pchar(BackupFileName),False);

BackupHFile:=CreateFile(pchar(BackupFileName),GENERIC_READ+GENERIC_WRITE,FILE_SHARE_READ,nil,OPEN_EXISTING,0,0);
if BackupHFile=INVALID_HANDLE_VALUE then Exit;
{открываем промежуточный файл}
///---------------

А продолжение статьи читайте на сайте: http://programmersclub.ru/gruzin-shifr-file-file
 

__________________________________________________________

 

Новинки в Клубе программистов

Как сделать действительно хороший сайт

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

***

Шифруем файл с помощью другого файла

В прошлой статье я вам рассказывал, как можно зашифровать файл с помощью пароля. Разумеется, чем длиннее пароль, тем труднее расшифровать файл. Давайте попробуем сосчитать, сколько времени нам потребуется на расшифровку такого файла. Допустим, что если пароль имеет размер 10 символов и допустим, что если мы попробовали расшифровать файл с верным паролем, то мы сразу поймём что это файл оригинальный (хотя это условие не обязательно потому что, расшифровывая файл мы не знаем что должно быть в оригинале, но в данном случае мы знаем что в оригинале и нам надо узнать только пароль).

***

Перехват API функций. Основы

Здравствуйте, Delphi'сты и им сочувствующие. Приветствуем мою очередную статью для чайников. Сегодня я вам расскажу, как надо перехватывать API функции. Перехватывая API функции, мы увеличиваем наши возможности и граница им только наше воображение. Для прочтения данной статьи с максимальной пользой обязательны хоть начальные знания низкоуровневого программирования и знание архитектуры работы Windows ...

Приглашаем всех в " Клуб программистов "

__________________________________________________________

 

Немного юмора

Объявление на пляже:
- Граждане отдыхающие! Просьба не заплывать за буйки! Наши спасатели дальше плавать не умеют.

***

Муж вбегает в отделение милиции и умоляет просит:
- Разыщите мою жену! Она исчезла! Вот фотография.
- Кто-то посмотрел на фотографию и недоумевающе стросил:
- А зачем?

***

Антивирусная программа:
Обнаружен вирус!!! Что делать???
-вылечить;
-переместить;
-удалить;
-игнорировать;
- послать другу;

***

Японцы выпустили новую версию игр "Тамагочи". она работает под управлением Windows и называется "Тамаглючи"...

***

Чем вирусы отличаются от Windows?
Вирусы не зависают!!!

***

Док-во Windows, это искусственный интелект он как и все живые существа старается как можно меньше работать...

***

Учеными обнаружен ребенок, воспитанный спамерами. Он может какать одновременно в тысячи горшков.

Юмор от членов клуба программистов здесь .

__________________________________________________________

 

Программистам на заметку

Если у вас есть желание поделиться своим опытом с читателями, вы являетесь обладателем ценных, интересных статей или авторских программ, а может вы просто хотите высказать свое мнение или замечание о рассылке, просто напишите мне . Я постараюсь уделить внимание каждому. А " Клуб программистов " всегда рад приветствовать в своих рядах новых пользователей.

 

© 2006, Кочари Арнольд и "Клуб программистов"