0

I'm using an Arduino Uno to build a smoke detection system, which works. Since I have to do an IoT project, I have to establish a secure connection with a device (I thought with my smartphone, or my PC), and I'm using a Bluetooth module HC-05 to do it. The idea is:

  1. Send the smoke sensor data to Arduino IDE, encrypt them and display the encrypted data to the serial (and it works)

  2. Connect Arduino to my smartphone using HC-05 and the app "Makerslab BT Demo" (already done)

  3. Decrypt the value of the sensor when I press "1" on the app and display it; Decrypt the value of the sensor when there's danger and display a "danger message". (that's what I have to do now).

That's my code on Arduino IDE:

    #include <AES.h>
    #include <AESLib.h>
    #include <AES_config.h>
    #include <xbase64.h>
    #include <SoftwareSerial.h>
    SoftwareSerial BT(1,0);

    #define VCC2 5
    int smokeA0 = A0;
    int buzzer = 11; 
    AES aes;
    byte cipher[400];
    char b64[400];
    float sensorValue;
    //char a;

    void do_encrypt(String msg, String key_str, String iv_str){

    byte iv[16];
    memcpy(iv,(byte*)iv_str.c_str(),16); 
    int blen=base64_encode(b64,(char*)msg.c_str(),msg.length()); 
    aes.calc_size_n_pad(blen); 
    int len=aes.get_size(); //zero padding
    byte plain_p[len]; 
    for(int i=0;i<blen;++i) plain_p[i]=b64[i];
    for(int i=blen;i<len;++i) plain_p[i]='\0';

    // l'AES-128-CBC encryption
    int blocks = len/16;
    aes.set_key((byte *)key_str.c_str(), 16);
    aes.cbc_encrypt(plain_p, cipher, blocks, iv);

    // use base64 encoder to encode the encrypted data:
    base64_encode(b64,(char *)cipher,len);
    Serial.println(String((char *)b64));
    }

    void setup() {
    
    pinMode(buzzer, OUTPUT);
    pinMode(smokeA0, INPUT);
    pinMode(VCC2, OUTPUT);
    digitalWrite(VCC2, HIGH); 

    BT.begin(9600);
    BT.println(F("Hi! Press "1" to know the sensor value.")); 
    Serial.begin(115200);
    
    Serial.println(F("gas sensor is warming up!"));
    delay(2000); //allow the sensor to warm up
    noTone(buzzer);
    }

    void loop() {

    String key_str="aaaaaaaaaaaaaaaa"; //16 bytes
    String iv_str="aaaaaaaaaaaaaaaa"; //16 bytes
    sensorValue = analogRead(smokeA0); 
    String msg = String(sensorValue, 3);
    do_encrypt(msg,key_str,iv_str);

    /* if(BT.available()){
     a=(BT.read());
     if(a=='1'){  
       Serial.print(F("Air quality: "));   
     }
    }*/
    if(sensorValue > 300){
  
    Serial.print(F(" | Danger!"));
    BT.print(F(" | Danger!"));
    tone(buzzer,1000,2000); 
    }
    else {
    noTone(buzzer);
    }
    Serial.println(F(""));
    delay(2000); 
    }

I'm not sure to use the right security protocol (AES), but encryption works. How I can decrypt data?

0 Answers0