Próbuję połączyć wyjście szyfrowania AES-256 z ciągiem znaków (aby porównać ten ciąg z zaszyfrowanym ciągiem wysłanym z telefonu z systemem Android).Arduino: awarie i błędy podczas łączenia łańcuchów
Zasadniczo konkatinacja wydaje się działać, ale po kilku błędach uruchamia się (nieczytelne znaki, łańcuch staje się krótszy zamiast dłuższego) lub występują awarie. Jest odtwarzalny, ulega awarii w tym samym punkcie po restarcie.
Wyodrębniłem kilka linii kodu Arduino, które demonstrują problem. Czyni następujące:
- Tworzenie liczbę losową i zapisać go do tablicy (robót)
- kodowanie AES tej tablicy (robót)
- zbudować reprezentację HEX każdego indeksu tablicy (robót)
- złączyć wskaźników do string (awarii)
#include <SPI.h>
#include "aes256.h" //include this lib
uint8_t key[] = {9,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,
1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8 }; //the encryption key
aes256_context ctxt; //context needed for aes library
void setup() {
Serial.begin(9600);
}
void loop() {
uint8_t data[] = {
0x53, 0x73, 0x64, 0x66, 0x61, 0x73, 0x64, 0x66,
0x61, 0x73, 0x64, 0x66, 0x61, 0x73, 0x64, 0x65, }; //the message to be encoded
long InitialRandom = random(2147483647); //0 to highest possible long
String RandomString = "" ;
RandomString+=InitialRandom; //random number to String
Serial.println(RandomString); //for debugging
//update data array: Random String into data array
for (int x=0; x<RandomString.length(); x++){
data[x] = RandomString[x];
}
//this encrypts data array, which changes
aes256_init(&ctxt, key); //initialize the lib
aes256_encrypt_ecb(&ctxt, data); //do the encryption
aes256_done(&ctxt);
//Here the problem starts.............................................
String encrypted=""; //the string I need finally
for (int x=0; x<sizeof(data); x++){ //data array is 16 in size
int a = data[x];
String b = String (a, HEX);
if(b.length()==1) b="0"+b; //if result is e.g "a" it should be "0a"
encrypted.concat(b); //this line causes the problem!!!
//Serial.println(b); //works perfect if above line commented out
Serial.println(encrypted); //see the string geting longer until problems occur
}
//Here the problem ends.............................................
Serial.println(); //go for next round, until crashing
}
Przeszukałem fora, próbowałem różnych sposobów łączenia (operator +, strcat). Wszyscy mieli podobne efekty. Czytałem, że biblioteka String miała błąd, zaktualizowała Arduino IDE do wersji 1.0.
ten trzymał mnie zajęty przez kilka dni, każda pomoc jest bardzo ceniona,
Dzięki wielkie!
Jak duży jest ciąg? – Anycorn
Zaczyna się od 0 i rośnie do 32 bajtów (każda pętla for dodaje 2 widoczne bajty) –