Как лучше зашифровать на клиенте и расшифровать на сервере?
На сервере создаешь public/private ключи. public отправляешь на клиент, с его помощью шифруешь все. public на то и придуман, что его можно было давать кому угодно, чтоб им можно было шифровать, но дешифровать может тот, у кого только private ключ. Собственно и все, в качестве алгоритма бери RSA, с ним проще всего, инфы полно, библиотек полно. Но можешь выпендриться и придумать что-то свое.
То, что вы описали, называется HTTPS