AES Verschlüsselung mit Base64

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Twantie
User
Beiträge: 10
Registriert: Mittwoch 18. Dezember 2019, 09:24

Hallo zusammen,

Ich habe mithilfe eines Tools folgende Verschlüsselungs-/Kodierungs-Logik aufgebaut: https://gchq.github.io/CyberChef/#recip ... YWxsbzEyMw.

Diese Logik möchte ich in Python implementieren.

Ich habe dazu folgenden Code geschrieben, welcher der oben genannten Logik folgt.

Code: Alles auswählen

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, base, modes
from cryptography.hazmat.backends import default_backend
import base64
from cryptography.hazmat.primitives import padding
import Padding


message = 'hallo123hallo123'
# message = Padding.appendCMSPadding(message, blocksize=16)
message = message.encode("ascii")

# padder = padding.PKCS7(128).padder()
# message = padder.update(message)
# message += padder.finalize()

message = base64.b64encode(message)
print("Input Encoded: ", message)

key = bytes.fromhex('112233445566778899aabbccddeeff00')
iv = bytes.fromhex('00000000000000000000000000000000')



algorithm = algorithms.AES(key)
cipher = Cipher(algorithm, mode=modes.CBC(iv), backend=default_backend())
encryptor = cipher.encryptor()
ciphertext = encryptor.update(message) #+ encryptor.finalize()


b64_ciphertext = base64.b64encode(ciphertext)
print(b64_ciphertext)

print('Key:             ', ''.join('{:02x}'.format(x) for x in key))
print('Input:           ', ''.join('{:02x}'.format(x) for x in message))
print('Ciphertext:      ', ''.join('{:02x}'.format(x) for x in b64_ciphertext))


print(b64_ciphertext)

Allerdings ist der Output VNR72whV/o0gcAR/G3J3Jw== zu kurz, bzw. ist nur ein Teil des erwarteten Outputs VNR72whV/o0gcAR/G3J3J8KT6UFrbBUCw1cO/EnNrPk=.

Die auskommentierten Padding Zeilen bringen zwar teilweise den Output auf die gewünschte Länge, der Inhalt verfälscht sich allerdings dadurch.

Der Output muss zwingend wie in der Logik beschrieben sein, da er später von einem anderen Programm verwendet wird.
Sirius3
User
Beiträge: 18279
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum hast Du da so viel auskommentiert? Das hat ja einen Sinn, dass das das seht.
Warum vercshlüsselst Du einen base64-kodierten String? Da immer Bytes verschlüsselt werden, ergibt das keinen Sinn.
Twantie
User
Beiträge: 10
Registriert: Mittwoch 18. Dezember 2019, 09:24

Sirius3 hat geschrieben: Donnerstag 16. Dezember 2021, 15:54 Warum hast Du da so viel auskommentiert? Das hat ja einen Sinn, dass das das seht.
Warum vercshlüsselst Du einen base64-kodierten String? Da immer Bytes verschlüsselt werden, ergibt das keinen Sinn.
Ich habe ein Programm auf einem Arduino laufen welches Strings mit der im Post genannten Logik verschlüsselt. Warum er das tut weis ich nicht, das macht die Bibliothek so. Und der Arduino bennötigt den String zum entschlüsseln eben auch dieser Logik entsprechend.
Und die auskommentierten Stellen sind wie im Post genannt Paddingversuche, die allerdings nicht wie gewünscht funktioniert hatten.
Sirius3
User
Beiträge: 18279
Registriert: Sonntag 21. Oktober 2012, 17:20

Padding ist dazu da, dass beliebige Bytes auf eine Blocklänge erweitert werden, so dass der Verschlüsselungsalgorithmus damit arbeiten kann. An welcher Stelle mußt Du also padden?
Antworten