Учитывая ваши ограничения, я вижу только один вариант - использовать пару открытый ключ / закрытый ключ , как это делает PGP, где открытый ключ используется для шифрования данных (которые вы затем отправляете через GET), и закрытый ключ используется для его расшифровки. В этот момент вы, вероятно, оставили бы JSON позади (хотя вы, безусловно, могли бы настроить данные как JSON, затем зашифровать их и отправить результат в виде строки в кодировке Base64 или чего-то еще). Обратите внимание, что это не защищает вас от ложных сообщений (поскольку открытый ключ, в общем-то, публичный), но это означает, что люди не могут читать данные в пути без закрытого ключа.