Tôi cố gắng ghép đầu ra mã hóa AES-256 thành chuỗi (để so sánh chuỗi này với Chuỗi được mã hóa được gửi từ điện thoại Android).Arduino: Sự cố và lỗi khi ghép chuỗi
Về cơ bản, kết hợp dường như hoạt động, nhưng sau một số lỗi chạy (các ký tự không đọc được, chuỗi ngắn hơn thay vì dài hơn) hoặc sự cố xảy ra. Nó có thể tái sản xuất, treo tại cùng một điểm chính xác sau khi khởi động lại.
Tôi đã trích xuất một số dòng mã Arduino minh họa sự cố. Nó thực hiện như sau:
- Tạo một số ngẫu nhiên và viết nó vào một mảng (hoạt động)
- mã hóa AES- mảng này (hoạt động)
- Xây dựng một đại diện HEX của mỗi chỉ số mảng (hoạt động)
- cONCATENATE các chỉ số vào một string (tai nạn)
#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
}
Tôi đã tìm kiếm các diễn đàn, thử các cách khác nhau để nối (toán tử +, strcat). Tất cả đều có hiệu ứng tương tự. Tôi đọc rằng thư viện String có lỗi, cập nhật Arduino IDE thành 1.0.
Điều này đã khiến tôi bận rộn trong nhiều ngày, mọi trợ giúp đều được đánh giá cao,
Cảm ơn rất nhiều!
chuỗi lớn như thế nào? – Anycorn
Nó bắt đầu từ 0 và tăng lên 32 byte (mỗi vòng lặp thêm 2 byte hiển thị) –