Организация SSL на бэкэнде (php) и фронтэнде (javascrypt).

В общем понадобилось хранить зашифрованный пароль в базе данных (firebase). При этом бэкэнд работает с firebase и может принимать запросы от фронтэнда, фронтэнд работает с firebase и может отправлять запросы на бэкэнд. Для редактирования базы данных связка фронтэнда с бэкэндом не нужна, как не нужна и для работы с бэкэндом из консоли сервера.

Проще говоря нужна была возможность:
1)шифровать и расшифровывать строку в javascript
2)шифровать и расшифровывать строку в php
3)шифровать в javascript, расшифровывать в php
4)шифровать в php, расшифровывать в javascript

Все это должно быть действительное шифрование с ключевой строкой, а не просто кодирование. На то чтобы это организовать убил по меньшей мере несколько часов ковыряния google в поисках ответов. Ответы пришлось собирать по кусочкам и все равно написать собственные функции.

Со стороны javascript библиотека ssl представлена CryptoJS.
Со стороны php библиотекой php-mcrypt.

Путем проб и ошибок написал функцию для шифрования/дешифрования в javascrypt

mkey — ключ для шифрования/дешифрования
salt — вертор шифрования/дешифрования
message — строка для шифрования/дешифрования
command — encrypt для шифрования/decrypt для дешифрования
Для работы функции нужно подключить AES(в данном случае) из пакета CryptoJS:
Скачать его можно по ссылке выше или ТУТ.
Также для работы функции необходима функция вычисления md5(спасибо жителям форумов за нее, гуглится по ключу «аналог md5() javascript»):

Код функции шифрования/дешифрования приведен ниже:

Со стороны php, как уже писал выше должен быть установлен и подключен php-mcrypt. Сама функция шифрования/дешифрования максимально приближена к той, что в javascript(аргументы функции аналогичны и расписаны выше):

Из особенностей то, что в php нужно кодировать результат в base64 и декодировать сообщение из base64, а также при декодировании удалять мусор от PKCS7.