Может кто-нибудь подсказать, это правильный подход, чтобы пойти
Почему вы хотите шифровать полезную нагрузку отдельно (вне ssl)?
Когда дело доходит до учетных данных (имя пользователя, пароль), если вы шифруете в браузере, вам нужен ключ внутри скрипта где-нибудь. Это ничего не добавляет к безопасности, только увеличивает сложность решения.
Вы можете использовать асимметричный шифр (RSA, ECC) для шифрования данных с использованием открытого ключа сервера. Ой, подождите - HTTPS уже сделает это за вас.
Клиентское шифрование может иметь место, где вы не хотите, чтобы сервер имел доступ к данным (например, защищенный обмен сообщениями, менеджер паролей, ...), однако для имени пользователя и пароля сервер должен все равно прочитать и обработать учетные данные.
Но мы не можем расшифровать данные в django.
Здесь мы понятия не имеем, как вы шифруете данные на стороне клиента. Вы можете попробовать отредактировать свой вопрос и добавить код шифрования и сообщение об ошибке
или мы должны изменить подход и заняться чем-то другим
Хотя в вашем коде определенно есть некоторые проблемы (я не могу сказать, все ли они)
- зашифрованный текст (зашифрованные данные) обычно являются двоичными (с непечатными символами). Вот почему при передаче в качестве параметров данные обычно кодируются в печатаемые общие символы (hex, base64, ..). Я вижу, вы прямо расшифровываете параметры, вы уверены, что данные не закодированы / отправлены правильно?
- Я вижу, вы не используете IV (вектор инициализации для режима CBC). Я предполагаю, что используемая вами библиотека будет просто использовать нулевой массив IV. Использование статического / нулевого значения IV ОЧЕНЬ небезопасно для режима CBC (или любого другого режима в целом). Вы уверены, что клиент не включает какой-то IV?
- Режим CBC является податливым, вы должны применить некоторую проверку целостности (с секретом целостности в клиентском скрипте это также не добавляет никакого значения)
Все это уже сделано (и сделано хорошо) с использованием HTTPS, так что вы просто пытаетесь реализовать другой уровень шифрования с не очень высокой добавленной стоимостью (а также с очевидными недостатками). Я считаю, что общий совет здесь - уверенно опираться на HTTPS