Как зашифровать ответы в DRF?

Я хочу зашифровать ответы API моего проекта DRF Есть ли способ зашифровать большие ответы так, чтобы я имел доступ к данным только на стороне front end? Я хочу зашифровать все ответы.

Да, это возможно, и я сам применял это. Вы можете сделать это, используя AES256 (Advanced encryption standard 256), применяемый непосредственно в сериализаторе.

В основном шифрование будет опираться на секретный ключ django для шифрования и дешифрования.

Таким образом, будет две функции encrypt() и decrypt(), где вы будете применять для каждого поля то, что вам нужно, чтобы отправить их зашифрованными в базу данных. А также для расшифровки, когда конечная точка выполнит GET запрос.

Пример и реализацию этих функций можно посмотреть здесь.

Пример:

from rest_framework import serializers
from django.conf import settings
from aesencryption import AESCipher

aes = AESCipher(settings.SECRET_KEY[:16], 32)


class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = ['name', 'address']

    def create(self, validated_data):
        # Here the data will be inserted into the db encrypted.
        validated_data['name'] = aes.encrypt(validated_data['name'])
        validated_data['address'] = aes.encrypt(validated_data['address'])
        return MyModel.objects.create(**validated_data)

    def to_representation(self, instance):
        # Here you will decrypt the data from the db.
        return {
            'name': aes.decrypt(instance.name),
            'address': aes.decrypt(instance.address)
        }

Предупреждение: Будьте осторожны при изменении секретного_ключа. Если вы потеряете его, вы не сможете получить данные обратно.

Вернуться на верх