Вы хотите то, чего не делают браузеры.
Вы просили: "The ideal solution would be a way to save the encryption key on a place that can be saved by php and accessed by javascript, but not by users, remote script parsers etc."
Конструкция веб-браузера и движка JavaScript в браузере такова, что любой Javascript, который может выполнять веб-браузер, может увидеть человек, который хочет посмотреть на него, украсть его, позаимствовать его, что угодно. Период. НЕТ такого места, к которому может получить доступ Javascript, но не пользователи или удаленные парсеры сценариев. Вам придется переосмыслить, как работает ваше приложение, если это проблема. Скорее всего, вам нужно хранить секретные данные на сервере и выполнять больше работы на сервере и меньше работать на клиенте, чтобы защитить то, что вы хотите защитить. Если подумать, браузер - это просто удаленный синтаксический анализатор, поэтому, если вы запрещаете удаленный синтаксический анализ, вы запрещаете браузер. Если вы разрешаете браузер, вы разрешаете удаленный анализатор сценариев.
Вы можете запутать свой Javascript, если захотите. Это заставит человека немного больше понять и сделать с ним что-то полезное, но это будет лишь дополнительным препятствием, которое любой решительный и компетентный человек может победить, если он действительно этого захочет. Если эта секретность действительно важна для вас, вам нужно переосмыслить дизайн приложения, чтобы секретная информация не требовалась в браузере, а браузер просто работал как механизм отображения и взаимодействия.
Просто, чтобы мне было ясно. Любой код, который может быть выполнен браузером, должен, по определению, быть тем, что любой пользователь или любой инструмент может загрузить и проверить. Вы можете использовать SSL для защиты данных от перехватчиков при транспортировке, но в конечном итоге он должен быть читаемым как Javascript, чтобы браузер мог его выполнить.