Hola a todos, estoy intentando desarrollar una función que sea útil para todos para encriptar y desencriptar en AES.
De momento estaba usando esta librería:
El ejemplo que ponen es algo así pelao y mondao.....:
Serial.begin(57600);
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("encrypted:");
Serial.println(data);
aes128_dec_single(key, data);
Serial.print("decrypted:");
Serial.println(data);
Yo he hecho el siguiente código:
//Cargamos las librerias necesarias para AES
#include <AESLib.h>
void setup()
{
Serial.begin(9600); //Inicializamos el puerto Serie.
encriptar("top secret",128); //Lo pongo aquí para que se ejecute una única vez
//desencriptar(cifrado,128);
}
void loop()
{
}
String encriptar(String var, int bits)
{
//Variable que se quiere encriptar y bits para encriptación (128, 256, etc)
//Función que devolverá encriptada el texto que contenga la variable
//de entrada como parámetro.
//El IV es un número normalmente aleatorio que se puede compartir
//y sirve para que un mismo texto encriptado no aparezca siempre
//de la misma forma, así es mas complicado desenciptarlo buscando
//patrones repetitivos.
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
// Largo del array (con un caracter extra para el caracter NULL)
int var_len = var.length() + 1;
// Prarara array de carateres (el buffer)
char char_array[var_len];
// Convertimos la variable a array y lo volcamos en char_array
var.toCharArray(char_array, var_len);
switch (bits)
{
case (128):
aes128_enc_single(key, char_array);
break;
case (256):
aes256_enc_single(key, char_array);
break;
default:
Serial.println(F("No se dió un parámtro correcto para bits de encriptación"));
break;
}
Serial.print("Encriptado:");
Serial.println(char_array);
return (char_array); //Se devuelve el texto encriptado
}
String desencriptar(String var, int bits)
{
//Variable que se quiere desencriptar y bits que se usaron para encriptarlo (128, 256, etc)
//Función que devolverá desencriptada el texto que contenga la variable
//de entrada como parámetro.
//El IV es un número normalmente aleatorio que se puede compartir
//y sirve para que un mismo texto encriptado no aparezca siempre
//de la misma forma, así es mas complicado desenciptarlo buscando
//patrones repetitivos.
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
// Largo del array (con un caracter extra para el caracter NULL)
int var_len = var.length() + 1;
// Prarara array de carateres (el buffer)
char char_array[var_len];
// Convertimos la variable a array y lo volcamos en char_array
var.toCharArray(char_array, var_len);
switch (bits)
{
case (128):
aes128_dec_single(key, char_array);
break;
case (256):
aes256_dec_single(key, char_array);
break;
default:
Serial.println(F("No se dió un parámtro correcto para bits de desencriptación"));
break;
}
Serial.print("Desencriptado:");
Serial.println(char_array);
return (char_array); //Se devuelve el texto desencriptado
}
Aunque no está acabado en principio parece que funciona, pero cuando obtengo los valores y los meto en páginas de decodificar AES no me sale nada en claro.
He probado a pasarlo antes por Base64 y nada....
Estoy usando esta web para AES:
https://cifraronline.com/descifrar-aes
Y esta para probar si es que la librería lo combierte antes o despues en base64:
¿Que opinión tenéis ustedes?
Estas funciones las quiero utilizar para darle mas flexibilidad a la hora de encriptar datos con AES y se podrían usar en muchas aplicaciones.
Creo que todos nos podríamos beneficiar de ello.
Y como estas funciones soportan parámetros pues se les puede decir la frase a encriptar, palabra clave, los bits, etc etc....
Pero yo estoy empezando flojito que me está costando.
Un saludo a todos.