Можно ли передавать по сети OpenSSL encrypt/decrype?
Конечно можете. Главное, чтобы совпадал пароль и IV.
Для блочного шифрования обычно используют AES-256-CBC.
Если планируется использовать всегда разные пароли, можно продумать схему обмена ключами клиента с сервером по алгоритму Диффи-Хеллмена и на их основе создавать пароль и IV по определённому алгоритму.
К примеру в телеграм используется следующий алгоритм для генерации ключа и вектора:
// псевдокод
x = 0 for messages from client to server
// or
x = 8 for those from server to client.
data = данные для шифрования или расшифрования
auth_key = ключ аутенификации 256 байт (зашить в клиент и сервер или получать при обмене ключами при помощи DH)
msg_key = substr(SHA1(data), 0, 16)
sha1_a = SHA1 (msg_key + substr (auth_key, x, 32));
sha1_b = SHA1 (substr (auth_key, 32+x, 16) + msg_key + substr (auth_key, 48+x, 16));
sha1_с = SHA1 (substr (auth_key, 64+x, 32) + msg_key);
sha1_d = SHA1 (msg_key + substr (auth_key, 96+x, 32));
aes_key = substr (sha1_a, 0, 8) + substr (sha1_b, 8, 12) + substr (sha1_c, 4, 12);
aes_iv = substr (sha1_a, 8, 12) + substr (sha1_b, 0, 8) + substr (sha1_c, 16, 4) + substr (sha1_d, 0, 8);
Для защиты от MITM, в случае обмена ключами, в клиент и сервер можно зашить свой сертификат и отвергать запросы не подписанные им.
Сомнения вызывает ф-ия openssl encrypt/decrypt - они кодируют/раскодируют только на основе соли или ещё каких-то данных свойственных железу напр? :)
Нет, всё чётко. Это же не random.