Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Программная инженерия > Безопасность, Шифрование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2012, 22:26   #1
perojok
Новичок
Джуниор
 
Регистрация: 10.03.2012
Сообщений: 1
По умолчанию Работа с библиотекой OpenSSL

Здравствуйте! Работаю с библиотекой OpenSSL и шифрую данные с помощью алгоритма AES, при этом получается очень странный эффект: если немного изменить зашифрованные данные, то при расшифровке видна часть исходного сообщения. Очевидно, что так не должно быть. Вот код программы:
PHP код:
#include <openssl/evp.h> 
#include <string.h>

int do_crypt(char *infile

 
int outleninlen
 
FILE *in, *out
 
in fopen("in.txt""r");
 
out fopen("out.txt""w");
 
unsigned char key[32]; // 256- битный ключ 
 
strcpy(key"10000000000000000000000000000002");
 
unsigned char iv[8];   // вектор инициализации 
 
unsigned char inbuf[BUFSIZE], outbuf[BUFSIZE]; 
 
EVP_CIPHER_CTX ctx
 const 
EVP_CIPHER cipher;   
 
 
 
EVP_CIPHER_CTX_init(&ctx);   // Обнуляем структуру контекста 
 
cipher EVP_aes_256_cfb();  // Выбираем алгоритм шифрования
 
EVP_EncryptInit(&ctxcipherkey0); // Инициализируем контекст алгоритма  

 
 
while(1) {                     // Шифруем данные  
 
inlen fread(inbuf1BUFSIZEin); 
 if(
inlen <= 0) break; 
 if(!
EVP_EncryptUpdate(&ctxoutbuf, &outleninbufinlen)) return 0
 
fwrite(outbuf1outlenout); 
 }   

 if(!
EVP_EncryptFinal(&ctxoutbuf, &outlen)) return 0
 
fwrite(outbuf1outlenout); 
 
EVP_CIPHER_CTX_cleanup(&ctx); 
 return 
1
}

int do_decrypt(char *infile)

 
int outleninlen
 
FILE *in, *out
 
in fopen("out.txt""r");
 
out fopen("out2.txt""w");
 
unsigned char key[32]; // 256- битный ключ 
 
strcpy(key"10000000000000000000000000000002");
 
unsigned char iv[8];   // вектор инициализации 
 
unsigned char inbuf[BUFSIZE], outbuf[BUFSIZE]; 
 
EVP_CIPHER_CTX ctx

 
EVP_CIPHER_CTX_init(&ctx); 
 
EVP_DecryptInit(&ctxEVP_aes_256_cfb(), key0); 

/* Дешифруем данные */ 
 
for(;;) { 
 
inlen fread(inbuf1BUFSIZEin); 
 if(
inlen <= 0) break; 
 if(!
EVP_DecryptUpdate(&ctxoutbuf, &outleninbufinlen)) return 0;
 
fwrite(outbuf1outlenout); 
 } 
 
/* Завершаем процесс дешифрования */ 
 
if(!EVP_DecryptFinal(&ctxoutbuf, &outlen)) return 0
 
fwrite(outbuf1outlenout); 
 
EVP_CIPHER_CTX_cleanup(&ctx); 
 return 
1
}

main(int argcchar **argv){
if(
atoi(argv[1]) == 1)
    
do_crypt(0);
if(
atoi(argv[1]) == 2)
    
do_decrypt(0);    

сделано на примере http://www.opennet.ru/docs/RUS/use_openssl/
Подскажите плиз, что тут не так?
perojok вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
google unit tests. Работа с библиотекой gtest _Bers Общие вопросы C/C++ 4 04.03.2012 13:11
Ошибка работы программы. Работа с библиотекой STL и шаблонами. С ++ Vasyl'eva Помощь студентам 1 25.12.2011 18:39
работа с библиотекой tinyxml zhenya.ya Общие вопросы C/C++ 0 19.04.2011 22:42
Немогу установить OpenSSl 0.9.7b L11L Софт 1 19.07.2010 20:14
Работа со стандартной библиотекой С. Lag Общие вопросы C/C++ 0 30.05.2010 19:03