При использовании tcp / ip вполне разумно убедиться, что поток не поврежден при передаче "случайно", поэтому не беспокойтесь об этом.
Если вы беспокоитесь о безопасности, обратите внимание, что Md5 не является безопасным, любой может вычислить контрольную сумму md5, вам нужен какой-то секретный ключ или pki-решение для подписи.
Обратите внимание, что «подписание» - это просто аутентификация, фактическое сообщение все равно может быть прочитано кем-то другим. Вам нужно шифрование + аутентификация, если вы также хотите, чтобы содержимое было секретным.
Простое решение - отправить ваши данные через ssl-сокет.
Я бы порекомендовал обратиться к bouncycastle для хорошей поддержки шифрования.
Если сообщения транспортируются другим способом (и, возможно, их придется обрабатывать другими системами, хранить в файлах, ftp: ed, mq: ed, xml-ed и т. Д. И т. Д.), Вы можете сериализовать сообщение в байт. [] и подписать их с помощью подписавшего в org.bouncycastle.crypto.signers, а также вычислить и добавить подпись в виде байта [] после фактического сообщения.
В этом случае вам потребуется использовать формат сообщения, чтобы вы могли отделить и извлечь как данные, так и подпись, а затем пересчитать подпись (используя открытый ключ отправителя) и убедиться, что полученные и Подсчет совпадений подписей.
Существует несколько стандартов для этого, S / MIME, pgp, PKCS # 7RFC 3369, и они, вероятно, лучше, чем все, что вы или я можете придумать, поэтому исследуйте их.
Если вы используете RMI, вы можете использовать google "secure rmi" - например, использовать фабрику сокетов SSL. Если вы просто хотите аутентификацию (открытый текст + подпись), вы можете написать фабрику сокетов для аутентификации ...
Если вы не имеете ни малейшего представления о безопасности, простейшим решением может быть создание защищенного туннеля с использованием VPN или ssh и отправка сообщений с использованием этого.