Hallo,
ich habe mit Arduino auf dem ESP32 ein Programm "geschrieben", welches
eine AES256 Verschlüsselung im CBC Modus durchführt. Es lief auch alles
soweit nur jetzt auf einmal bleibt der Chip/das Board kurz vorm
Programmende hängen. Genauer bei:
1
Serial.println("\n Deciphered text: ");
2
3
for(intk=0;k<output_len;k++)
4
{
5
Serial.print((char)output2[k]);
6
}
Auf dem SerialMonitor sehe ich nur den Anfang von "Deciphered text: ".
Wenn ich diesen Abschnitt komplett auskommentiere läuft der Code ohne
Probleme durch. Auskommentieren von
1
Serial.println("\n Deciphered text: ");
reicht nicht.
Hat wer von euch eine Idee woran es liegt/liegen könnte? Die Hardware
habe ich schon getauscht und löst das Problem nicht. Der Fehler trat
zudem von jetzt auf gleich auf.
Hier der komplette Code: (Die Codelänge halte ich noch für vertretbar
damit es kein Anhang sein sollte. Das die Variablennamen nicht optimal
sind weiß ich.)
output_len ist wohl gleich 0
damit ist k nnicht kleiner und damit gehts nicht in die for Schleife.
Du definierts output_len in setup{} rufst es aber in loop{} auf.
John P. schrieb:> output_len ist wohl gleich 0>> damit ist k nnicht kleiner und damit gehts nicht in die for Schleife.>>> Du definierts output_len in setup{} rufst es aber in loop{} auf.
Wo rufe ich was in loop{} auf?
Ich schrieb:> input ist nicht als String abgeschlossen -> strlen gibt dir irgendwas> verrücktes aus -> output_len > 128 -> Fehler
Vielen Dank für deinen Hinweis / Hilfe.
Wenn ich mir den Wert von input_len, den ich mit strlen ermittelt habe,
zeigt er mir immer den korrekten Wert an.
Zwischenzeitlich hatte ich herausgefunden das wenn ich 4 Zeichen vom
Input wegnehme er 4 Zeichen länger läuft.
Das ist alles schon so richtig d.h. das Casting muss schon sein. (Damit
ich auf dem SerialMonitor was vernünftiges zum Testen angezeigt
bekomme.) Zudem brauche ich auch definitiv die Länge / Größe der
Input-Daten. Hat was mit dem AES-Betriebsmodus zu tun: Dieser braucht
für die Verschlüsselung eine feste Blocklänge von 16 Byte bzw ein
ganzzahliges Vielfache davon. D.h. wenn ich 17 Byte an Daten habe muss
man 32 Byte verschlüsseln. Aber die eigentlichen Daten sind dann halt
nur die ersten 17Byte.
Ich nehme an, dass output2 kürzer ist als output_len und du damit einen
Zugriff auf "Null" machst. Klassiker, wenn ein Controller einfach
aufhört zu arbeiten. Mach in die Ausgabe eine überprüfung rein
if(output2[k] == 0) break;
damit die For-Schleife beendet wird wenn der Wert "falsch" ist.