Seite 1 von 1

Cryptodome AES DjangoRestFramework Postman

Verfasst: Sonntag 26. Juni 2022, 08:32
von naheliegend
Hi,

ich habe mit DjangoRestFramework einen Test-Service gebaut, der Verschlüsselung und Entschlüsselung simulieren soll.

Es gibt zwei Endpunkte: /encryption und /decryption. Ich nutze AES im CFB mode mit Initialisierungsvektor (der ist immer gleich), das ist aber irrelevant.

Wenn ich jetzt an /encryption eine Request schicke

Code: Alles auswählen

{
    "input": "Das ist ein anderer Test2"
}
,dann verschlüsselt der schön den String:

Code: Alles auswählen

cipher = AES.new(aes_key, AES.MODE_CFB, iv=iv)
encrypted_data = cipher.encrypt(data['input'].encode('latin-1'))
data['output'] = encrypted_data.decode('latin-1')
#Serializer-Gedöns...

Code: Alles auswählen

{
    "id": 11,
    "input": "Das ist ein anderer Test2",
    "output":"D}§oʾt‡ð>Y^„?Aã\u000bð\\gÎ",
    "iv":"Cô]\rÑb*ç[ô[Ê×",
    "created_at": "2022-06-26T07:18:58.333523Z",
    "updated_at": "2022-06-26T07:18:58.334019Z"
}

Wenn ich nun aber den verschlüsselten Outputwert nehme und in Postman dann an /decryption schicke

Code: Alles auswählen

{
    "input": "D}§oʾt‡ð>Y^„?Aã\u000bð\\gÎ"
}
, dann meckert er rum:

Code: Alles auswählen

{
    "detail": "JSON parse error - Invalid control character at: line 2 column 16 (char 17)"
}
Ich versuche alles in 'latin-1' zu handeln und demnach zwischen bytes und string zu handeln.

Kann man da etwas machen?

Re: Cryptodome AES DjangoRestFramework Postman

Verfasst: Sonntag 26. Juni 2022, 09:05
von __deets__
JSON kann keine binären Daten repräsentieren. Deine Verschlüsselung kann zb auch problemlos Anführungszeichen produzieren, die dann deinen String voreilig beenden.

Wenn du binäre Daten transportierten willst, benutz dazu geeignete Mittel wie zb multipart form encoding, oder enkodier die in base64 und pack die in JSON - die sind dann garantiert darstellbar.

Re: Cryptodome AES DjangoRestFramework Postman

Verfasst: Sonntag 26. Juni 2022, 09:08
von Sirius3
Binärdaten kodiert man mit base64 oder anderen Encodings, die auf ASCII abbilden.

@__deets__: die Kodierung von Anführungszeichen ist in JSON kein Problem, was Probleme machen kann, sind die nicht-Darstellbaren Zeichen im Bereich <0x20 oder im 0x80-er Bereich.

Re: Cryptodome AES DjangoRestFramework Postman

Verfasst: Sonntag 26. Juni 2022, 18:23
von naheliegend
Vielen Dank, das ergibt Sinn. :)