@ProCxx

Страница 2466 из 2477
Sergey
24.10.2018
21:28:30
Ну что-то похожее)

Constantine
24.10.2018
21:29:35
Ну что-то похожее)
Скорее всего вам это не нужно (если вы не пишете код для АЭС)

Alexander
24.10.2018
21:29:38
ну можешь попробовать погонять статическим анализом. оно кое-как попытается проанализировать все пути выполнения.

Sergey
24.10.2018
21:30:56
Так, что подразумевает стат анализ в этом случае?

Google
Alexander
24.10.2018
21:31:17
Так, что подразумевает стат анализ в этом случае?
запуск статического анализатора на твоей функции resize

Constantine
24.10.2018
21:31:20
Проверка кода на типичные ошибки миллионом и еще одной эвристикой

Например на вызов p = realloc(p, ...)

Alexander
24.10.2018
21:31:44
и вера в то, что он проанализирует все возможные пути выполнения функции и посмотрит, течёт ли память по какому-нибудь пути

Ignat
24.10.2018
21:32:46
вообще за статическими гарантиями обычно идут в отличные от С++ языки

Constantine
24.10.2018
21:33:20
Alexander
24.10.2018
21:33:53
вообще за статическими гарантиями обычно идут в отличные от С++ языки
ну что ж делать, если нам хочется в С++ это видеть

Ignat
24.10.2018
21:34:42
страдать, как обычно

Vyacheslav
25.10.2018
00:28:23
Внезапно нагуглил http://telegrammy.net/group/ProCxx/page1.htm

Vadim
25.10.2018
05:07:59
Ребят, привет!

Нужна помощь. Читаю файл кусками с помощью ifstream в unsigned char[64]

затем кодирую с помощью rsa и декодирую

и пишу в другой файл с помощью ofstream. В итоге валидными на выходе получаются только текстовые файлы

Google
Vadim
25.10.2018
05:13:05
Перед записью в файл проверяю строки c strcmp, они равны, но если после записи открыть оба файла и сравить они получаются разные

*открыть как hex

Vladislav
25.10.2018
05:19:05
а ты ofstream в бинарном режиме создаешь?

std::ofstream ofs ("test.txt", std::ofstream::out | std::ofstream::binary);

Vadim
25.10.2018
05:22:23
да

https://pastebin.com/mZaTyeTi

Перед записью в файл проверка: if (strcmp(buffer, encrypted)), которая никогда не выполняется. т.е. строки всегда равны!

Vladislav
25.10.2018
05:30:02
а как ты определяешь валидность?

Vadim
25.10.2018
05:30:48
Просто открытием. Текстовые файлы открывает, картинки и архивы -нет

Vladislav
25.10.2018
05:31:18
может дело в том что ты добиваешь файлы нулями до кратности 64 байтам?

или скорее даже не нулями, а мусором

Vadim
25.10.2018
05:32:13
Я хз, на выходе то одинакового размера они получаются.

Vladislav
25.10.2018
05:32:13
а, не

Vadim
25.10.2018
05:32:40
Честно говоря до этого не работал с потоками стд, но вроде как я об этом позаботился

Vladislav
25.10.2018
05:32:43
а в хекс-редакторе как разница выглядит?

Vadim
25.10.2018
05:32:54
сек

https://pp.userapi.com/c844417/v844417438/119fc1/Hx2Dkt0Lnwo.jpg

Вот. Ну там с ходу даже видно разницу. При том у текстового файла нет отличий, даже в hex-редакторе

Sergey
25.10.2018
05:37:25
А почему проверка strcmp, а не memcmp?

Vladislav
25.10.2018
05:38:43
https://pp.userapi.com/c844417/v844417438/119fc1/Hx2Dkt0Lnwo.jpg
ага, вроде понятно в чем дело

Google
Vadim
25.10.2018
05:39:10
попробовал memcmp, результат тот же

Vladislav
25.10.2018
05:39:15
rsa->encrypt(buffer, len) кодирует либо до len либо до нуля

раскодирует тоже, соответственно, а дальше в encrypted будет лежать мусор

а strcmp тоже сравнивает до первого нуля, поэтому сравнение отрабатывает нормально

Vadim
25.10.2018
05:43:18
сейчас посмотрю

len передается по ссылке и возвращает всегда 256, а у rsa->decrypt(...) len возвращает кол-во раскодированных байт. Печатаю в консоль каждый прочитанный блок и они равны

https://pp.userapi.com/c844417/v844417438/119ffa/7CMGfBXSNA8.jpg

Так, а если подойти с другой стороны? Я читаю файл кусками, потому что при ключе rsa размером 2048 максимальный размер кодируемой памяти - 256 байт

мб я ошибаюсь и в openssl есть методы кодирующие и декодирующие большие участки целиком?

Vyacheslav
25.10.2018
06:14:07
Не нулю

Или посмотреть другие методы rsa

Иначе как функция encrypt узнает, сколько байт из буфера нужно закодировать?

Vadim
25.10.2018
06:16:54
http://www.opennet.ru/cgi-bin/opennet/man.cgi?topic=RSA_public_encrypt

RSA_public_encrypt() returns the size of the encrypted data (i.e., RSA_size(rsa)). RSA_private_decrypt() returns the size of the recovered plaintext. On error, -1 is returned; the error codes can be obtained by ERR_get_error(3).

В моём случае rsa->encrypt(...) - это обертка над сишным апи

Вот если интересно код encrypt https://pastebin.com/e9hGjU92

RSA_size(rsa)) - при ключе в 2048 всегда возвращает 256

Sergey
25.10.2018
06:20:19
message - это ведь не строка, а массив байт?

Vadim
25.10.2018
06:20:35
да, верно

Google
Sergey
25.10.2018
06:20:42
Почему strlen(message) ?

Vadim
25.10.2018
06:20:57
а как?

Действительно, может тут я поспешил. Но как иначе измерить?

Ilia
25.10.2018
06:22:37
Действительно, может тут я поспешил. Но как иначе измерить?
ЧТо надо измерить? Я сходу не вижу выше...

Sergey
25.10.2018
06:22:50
Кода читаешь из файла ты же получаешь сколько ты байт прочитал — вот это значение и передавай

Vadim
25.10.2018
06:23:16
я понял. Как раз это писал)

Сейчас попробую

Sergey
25.10.2018
06:24:30
И в функции нет free для cencrypt.

Vadim
25.10.2018
06:29:27
Не помогло.

Добавил ещё одну проверку - на размер буффера и закодированого и раскодированного текста из буфера. размер буффера и раскодированного текста всегда совпадают

https://pp.userapi.com/c845217/v845217221/116e78/C7dap_D9NUQ.jpg

если bufferSize = 1, то всё норм кодируется и декодируется. Но считывать и писать в файл по байту мне кажется не очень мысль. Да и долго очень.

И в функции нет free для cencrypt.
Немного невнимательно исправил что ты сказал. Спасибо, ошибка там и была.

Antony
25.10.2018
08:01:21
А кто-нибудь разбирался с "Core Coroutines" http://open-std.org/JTC1/SC22/WG21/docs/papers/2018/p1063r1.pdf ?

Pawel
25.10.2018
08:42:08
Шалом, коллеги. Вопросы про windows api принимаются?

Pawel
25.10.2018
08:47:51
Супер. Как проще всего синхронно отправить сообщение другому процессу (WM_COPYDATA) и дождаться от него ответа (тоже WM_COPYDATA) ? нужно сделать что-то типа WaitForWMCopyData

Vyacheslav
25.10.2018
08:55:37
Google
Vyacheslav
25.10.2018
08:57:28
Что-то другому процессу в любом случае придется передать. Например, хендл окна, куда отправлять ответное сообщение.

Pawel
25.10.2018
08:58:37
А дожидаться WinAPI будет, если ты 0) будешь использовать SendMessageXXXX, а не PostMessage 1) Не задаш таймаут
эт понятно, я именно SendMessage использую. Попробую ещё раз более внятно расказать что хочу. Окно A (сервер) получает WM_COPYDATA от окна Б (от клиента), отправленный с помощью SendMessage(WM_COPYDATA... , хэндлит запрос и отправляет ответ окну Б в виде SendMessage(WM_COPYDATA... Я пока что пытаюсь понять вот что. Окно Б от момента отправки сообщения до момента его обработки в в окне А будет заблокировано и не будет принимать сообщения, или всё таки нет

Pawel
25.10.2018
09:00:22
Назад данные можно и через именованый пайп принять. А в первом сообщении отправить его имя.
на мой взгляд проще тогда уже чисто на пайпах делать, без WM_COPYDATA

Vyacheslav
25.10.2018
09:00:30
PostMessage не блокирует отправляющий поток, но не гарантирует доставку

Ilia
25.10.2018
09:00:56
Vyacheslav
25.10.2018
09:01:41
на мой взгляд проще тогда уже чисто на пайпах делать, без WM_COPYDATA
Можно. Только как ты серверному процессу имя пайпа сообщишь? А если ты его зафиксируешь, то что будет, если будет звпущен второй серверный процесс?

Pawel
25.10.2018
09:05:01
Можно. Только как ты серверному процессу имя пайпа сообщишь? А если ты его зафиксируешь, то что будет, если будет звпущен второй серверный процесс?
в принципе я обе программы разрабатываю и имя пайпа могу смело захардкодить и потом разруливать подобные ситуации. Но это конечно всё неудобно и сложно, архитектурно на WM_COPYDATA проще связать два процесса. Вот думал как бы мне ешё синхронный обмен между окнами сделать, получается что ни как

Pawel
25.10.2018
09:07:56
Так он и есть синхронный.
в смысле, запрос - ответ

Vyacheslav
25.10.2018
09:08:42
С copydata можно отправлять сообщение через sendmessage из другого потока, например. Чтобы окно не зависало, но была возможность обрабатывать ошибки отправки. Или отправлять через postmessage, а в нём указывать уникальный номер сообщения, чтобы потом понять, на какое сообщение ответ пришел. Этот уникальный номер сервер в ответном сообщении должен дублировать.

Ilia
25.10.2018
09:09:26
в принципе я обе программы разрабатываю и имя пайпа могу смело захардкодить и потом разруливать подобные ситуации. Но это конечно всё неудобно и сложно, архитектурно на WM_COPYDATA проще связать два процесса. Вот думал как бы мне ешё синхронный обмен между окнами сделать, получается что ни как
Мне кажется, у тебя немножко каша в голове по поводу "синхронный/асинхронный". Если ты что-то вызываешь, и чтобы получить результат, тебе не надо ждать специально, а вызов СРАЗУ даст тебе результат, это -- синхронный вызов. Так работает SendMessageXXX. Если ты что-то вызываешь, а потом другим вызовом тебе придёт результат -- это Асинхронный вызов. Так организован PostMessage.

Страница 2466 из 2477