Большой Воронежский Форум
» Программирование>СРОЧНО!!! Нужна прога для сдачи =) Я не жадный!
Конер 19:06 02.05.2007
Так вот, нужно сдать последнюю прогу для получения зачета =) Смысл- каким либо образом обеспечить защиту файла, ну или просто данных, хотя лучше все же файла =)) Так вот, нужно поле для ввода пароля, а потом уже должен быть доступ к соотв. файлу (информации)... Крайне желательно данные не только защитить паролем но и каким-нибудь алгоритмом шифрования! Как все это реализовать визуально - это уже ваши соображения и мои одобрения!!!
А теперь главное- срок до след недели!!!
Цена - все зависит от того что вы сможете сделать, но она в любом случае будет немаленькая!!!
Жду...
пишите предложения - [email protected]
или личка!
PS это важно! у меня пропадает автомат =((( Кто готов помочь? [Ответ]
Конер 00:00 03.05.2007
хм... ну что неужели нет никого ?
кстати, язак желательно дельфи или си=) [Ответ]
aerin 17:40 03.05.2007
Идея проста как тапок, нужно лишь вспомнить, что если A xor B = C,
то C xor B = A. Далее, с паролем, самый простой способ - дописать его в конец данных и после распаковки сравнить с введенным пользователем.
Вот код(писалось наспех, поэтому все обработки ошибок опущены ):

Сообщение от :
#include <windows.h>
#include <stdio.h>
#include <io.h>

FILE* infile = NULL;
FILE* outfile = NULL;
BYTE* pass = NULL;
int cur_char = 0;
int pass_len = 0;
long ifsize = 0;

void main( int argc, char* argv[] )
{
if( 5 != argc )
{
printf( "Usage: encdec action infile outfile password\n" );
printf( " action = e - encode or d - decode\n" );
printf( " infile = name of input file\n" );
printf( " outfile = name of output file\n" );
printf( " password = password for operation\n" );
return;
}
infile = fopen( argv[2], "rb" );
outfile = fopen( argv[3], "w+b" );

pass = (BYTE*)argv[4];
pass_len = strlen( argv[4] );

BYTE indata;
BYTE outdata;
ifsize = _filelength( _fileno( infile ) );
for( long i = 0; i < ifsize; i++ )
{
fread( &indata, 1, 1, infile );
outdata = pass[cur_char] ^ indata;
fwrite( &outdata, 1, 1, outfile );
cur_char++;
if( cur_char == pass_len )
cur_char = 0;
}

BYTE data;
if( 0 == strcmp( "e", argv[1] ) )
{
for( int i = 0; i < pass_len; i++ )
{
data = pass[i] ^ pass[cur_char];
fwrite( &data, 1, 1, outfile );
cur_char++;
if( cur_char == pass_len )
cur_char = 0;
}
fclose( infile );
fclose( outfile );
printf( "Encoding complete.\n" );
}
else
{
fclose( infile );
fflush( outfile );
fseek( outfile, -pass_len, SEEK_END );
for( int i = 0; i < pass_len; i++ )
{
fread( &data, 1, 1, outfile );
if( data != pass[i] )
{
fclose( outfile );
remove( argv[3] );
printf( "Wrong password.\n" );
return;
}
}
_chsize( _fileno(outfile), ifsize - pass_len );
fclose( outfile );
printf( "Decoding complete.\n" );
}
}

Упс, в программу из-за спешки прокрались два насекомых...
[Ответ]
Вверх