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

C++, openssl, fcgi что не так с функцией расшифровки?

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

Подскажите, почему при расшифровке ранее зашифрованного текста в консоли показывает правильную фразу, а в поток вы вода приходит еще куча хлама? Пример,

вывод в консоли
Lib is inited                                                                                                                                             
Socket is opened
Request is inited
Try to accept new request
request is accepted
param_par: action=encrypt
param_par: text=my text for encrypt
Encr text is: M.v@Vr5A]P֦Ǒf
data len: 19
chph_len: 32
hash_len: 45
Hash text is: TS52kR7EQPq0HlaUcjW2QV2051DA1qb0x5ERmpyY/2b/

Try to accept new request
request is accepted
param_par: action=decrypt
param_par: text=TS52kR7EQPq0HlaUcjW2QV2051DA1qb0x5ERmpyY/2b/
hash_len len: 44
chph len: 33
chph is: M.v@Vr5A]P֦Ǒf
result_len: 64
inal: my text for encrypt
ответ в браузере
string(235) "HTTP/1.1 100 Continue

HTTP/1.1 200 OK
Date: Thu, 29 May 2014 06:54:40 GMT
Server: Apache/2.4.9 (Win32) PHP/5.5.11
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8

TS52kR7EQPq0HlaUcjW2QV2051DA1qb0x5ERmpyY/2b/
"
string(223) "HTTP/1.1 100 Continue

HTTP/1.1 200 OK
Date: Thu, 29 May 2014 06:54:43 GMT
Server: Apache/2.4.9 (Win32) PHP/5.5.11
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8

my text for encrypt












я"



Насколько я могу предположить, проблема здесь кроется где-то в районе функции EVP_DecryptFinal_ex, которая при вызове показывает следующую ошибку:
2147144708:error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length:evp_enc.c:532:


Буду благодарен за любую помощь.
Исходники на github https://github.com/Slavenin/fcgi_encrypt
  • Вопрос задан
  • 2879 просмотров
Решения вопроса 1
Slavenin999
@Slavenin999 Автор вопроса
программист php/erlang/elixir/js
Проблема решена. Необходимо было просто уменьшить размер раскодированного в64 текста на 1 (я так понимаю 0 байт)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
e_param.text = (unsigned char *) data->c_str();
...
e_param->text[e_param->data_len] = '\0';

std::string::c_str возвращает const char *, эту строку нельзя модифицировать.

if (1 != EVP_EncryptUpdate(ctx, e_param->result, &len, e_param->text, e_param->data_len))

e_param->result не инициализирован к этому моменту
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы