Slavenin999
@Slavenin999
программист php/erlang/elixir/js

C++, openssl как правильно сделать шифрование блоками?

Доброго времени суток, %habrauser%!

Пишу простое fcgi-приложение с использованием openssl, которое будет шифровать/дешифровать приходящие данные. В с++ я разбираюсь плоховато, поэтому возможно велосипедостроительство... Подскажите как правильно сделать шифрование/дешифрование данных по блокам? Код находится здесь. В предыдущей версии вроде бы работало, но криво из-за использования не инициализированных переменных. В текущей пытаюсь этого избежать путём блочного шифрования, но получается ерунда вида:
param_par: action=encrypt
param_par: text=my text for encrypt
substr size is 16
substr is my text for encr
substr encr is rH.gKf۵my text for encr
substr size is 3
substr is ypt
substr encr is :(ɬp9H,-ypt
final is rH.gKf۵my text for encr:(ɬp9H,-ypt:(ɬp9H,-ܫVD[g


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

Буду благодарен за любую помощь!
  • Вопрос задан
  • 3240 просмотров
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
//шифруем блок
if (1 != EVP_EncryptUpdate(ctx, out_buffer, &len, buffer, BUFF_SIZE))
handleErrors();

printf("substr encr is %s\n", (char *)out_buffer);
//запоминаем результат
e_param->result.append((char *) out_buffer);

index++;
e_param->data_len -= BUFF_SIZE;


Вы нигде не используете len который вам возвращает EVP_EncryptUpdate, и почему-то считаете, что с out_buffer можно обращаться как с C-строкой (что неверно).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы