Как зашифровать ответы в 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)
}
Предупреждение: Будьте осторожны при изменении секретного_ключа. Если вы потеряете его, вы не сможете получить данные обратно.