Отправка дайджеста (MD5 или другого) не предотвратит фальсификацию, если ее нельзя проверить (как правило, с помощью подписи и сертификата, которые знает сервер). В противном случае злоумышленник может легко изменить сущность запроса и дайджест в URI одновременно. Вам непременно нужно подписать дайджест своим закрытым ключом, предполагая, что он заранее знает ваш открытый ключ, чтобы проверить его.
Несмотря на то, что вы говорите, что не хотите использовать SSL / TLS, вам действительно следует изучить его, поскольку самодельная криптография редко бывает настолько безопасной, как вам бы хотелось (см. Собственный пример). Это должно обеспечить вам целостность (без вмешательства) и конфиденциальность (шифрование), при условии, что вы правильно используете ключи и / или сертификаты.
Если вы хотите зашифровать объект, вы можете рассмотреть:
- PGP / OpenPGP / GPG (вы можете использовать его в C # с BouncyCastle)
- Шифрование XML (и, вероятно, XML DSig).
- HTTPsec (хотя я не уверен, насколько это «доказано», и я не знаю ни о какой реализации C #)