Cryptodome AES DjangoRestFramework Postman

Django, Flask, Bottle, WSGI, CGI…
Antworten
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

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?
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Vielen Dank, das ergibt Sinn. :)
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Antworten