Почему в монитор порта в таком виде encrypted(HEX):14 25 FFFFFFEC FFFFFF9B 5D выводиться информация?

JuraPal
Offline
Зарегистрирован: 06.07.2019

Почему в таком "FFFFFFEC" виде выводиться содержимое зашифрованной строки в шестнадцатеричном формате.

Почему выводиться не по байту, а в таком виде "FFFFFFEC"

или

FFFFFF9B

я ожидаю подобно

14 25 5D и т.д.

 

Это пример для библиотеки.

#include <AESLib.h>
//Шифрование и дешифрование алгоритмом AES 128бит ключ.

void setup ()
{
  Serial.begin (9600) ;
}
 
void loop () 
{
  Serial.println("Начало: ");
  aesTest();
  delay(2000);

}



 void фesTest ()
 {
  
  uint8_t key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
  char data[] = "0123456789012345"; //16 chars == 16 bytes
  aes128_enc_single(key, data);

  Serial.print("sizeof(data):");
  Serial.println(sizeof(data));

  Serial.print("decrypted:");
  Serial.println(data);
  
  Serial.print("encrypted(HEX):");
  for (int i=0; i<(sizeof(data)); i++) {
     Serial.print(data[i], HEX);
     Serial.print(" "); //separator
     }
  Serial.println();
  
  aes128_dec_single(key, data);
  Serial.print("decrypted:");
  Serial.println(data);

  Serial.print("decrypted(HEX):");
  for (int i=0; i<sizeof(data); i++) {
     Serial.print(data[i], HEX);
     Serial.print(" "); //separator
     }
  Serial.println();


 }

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

1. Исправьте опечатку в строке№19

2. Замените char на unsigned char в строке №23.

3. В строках №№ 30 и 41 напишите Serial.println((char *)data); а то print не понимает массив беззнаковых целых.

Надеюсь, поможет.

JuraPal
Offline
Зарегистрирован: 06.07.2019

Спасибо за ответ.  Так работает. 

(На форуме я не вижу как можно исправить мою опечатку. Разве что выложить код еще раз.)

 

Я так понимаю была был массив символов, а стал массив чего?

Цитата:
   unsigned char
  Описание:
   Беззнаковый тип данных, занимающий в памяти 1 байт. То же самое, что и тип данных byte.
 
#include <AESLib.h>
//Шифрование и дешифрование алгоритмом AES 128бит ключ.

void setup ()
{
  Serial.begin (9600) ;
}
 
void loop () 
{
  Serial.println("Начало: ");
  aesTest();
  delay(2000);

}



 void aesTest()
 {
  
  uint8_t key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
  //char data[] = "0123456789012345"; //16 chars == 16 bytes
  unsigned char data[] = "0123456789012345"; //16 chars == 16 bytes
  aes128_enc_single(key, data);

  Serial.print("sizeof(data):");
  Serial.println(sizeof(data));

  Serial.print("decrypted:");
  //Serial.println(data);
  Serial.println((char *)data);
  
  Serial.print("encrypted(HEX):");
  for (int i=0; i<(sizeof(data)); i++) {
     Serial.print(data[i], HEX);
     Serial.print(" "); //separator
     }
  Serial.println();
  
  aes128_dec_single(key, data);
  Serial.print("decrypted:");
  //Serial.println(data);
  Serial.println((char *)data);

  Serial.print("decrypted(HEX):");
  for (int i=0; i<sizeof(data); i++) {
     Serial.print(data[i], HEX);
     Serial.print(" "); //separator
     }
  Serial.println();


 }

 

 

 

JuraPal
Offline
Зарегистрирован: 06.07.2019

Спасибо за ответ. (забыл нажать  кнопку ответ)

JuraPal
Offline
Зарегистрирован: 06.07.2019

Объясните плиз что происходит почему стало нормально работать.

почему - "массив беззнаковых целых"

что значит - (char *)data 

Часто такое вижу в скетчах, но не понимаю что это значит. *  = указатель, но откуда вдруг указатель возник.

 

Я решил проблему по другому. Если не менять 

это

char data[]  = ...

на это

unsigned char data[] = ...

тогда можно 

  for (int i=0; i<(sizeof(data)-1); i++) {
     Serial.print(byte(data[i]), HEX); Serial.print(" "); 
     //Serial.print(data[i]&0xFF, HEX); Serial.print(" "); //или можно так тоже
     }
  Serial.println();

 

Но ваш Вариант лучше. Хотелось бы понять что за волшебство вы сотворили ))

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Цитата:
что значит - (char *)data

Это явное приведение типов.