Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
tiny-AES-c — AES128/192/256 portátil pequeño en C | Kitploit
Herramientas/GitHubGitHub/kokke/tiny-aes-c
Seguridad de Sistemas EmbebidosHerramientas de Cifrado/DescifradoCriptografíaTop en Criptografía #18Top en Herramientas de Cifrado/Descifrado #19
GitHubkokke/tiny-aes-c

tiny-AES-c

AES128/192/256 portátil pequeño en C

Ver Repositorio
5.0k1.4k20hace 1 añoRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CI

Tiny AES en C

Esta es una implementación pequeña y portátil de los algoritmos de cifrado AES ECB, CTR y CBC escritos en C.

Puedes sobrescribir el tamaño de clave predeterminado de 128 bits con 192 o 256 bits definiendo los símbolos AES192 o AES256 en aes.h.

La API es muy sencilla y tiene este aspecto (estoy usando tipos anotados al estilo C99 <stdint.h>):

/* Initialize context calling one of: */
void AES_init_ctx(struct AES_ctx* ctx, const uint8_t* key);
void AES_init_ctx_iv(struct AES_ctx* ctx, const uint8_t* key, const uint8_t* iv);

/* ... or reset IV at random point: */
void AES_ctx_set_iv(struct AES_ctx* ctx, const uint8_t* iv);

/* Then start encrypting and decrypting with the functions below: */
void AES_ECB_encrypt(const struct AES_ctx* ctx, uint8_t* buf);
void AES_ECB_decrypt(const struct AES_ctx* ctx, uint8_t* buf);

void AES_CBC_encrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, size_t length);
void AES_CBC_decrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, size_t length);

/* Same function for encrypting as for decrypting in CTR mode */
void AES_CTR_xcrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, size_t length);

Notas importantes:

  • No se proporciona relleno, por lo que para CBC y ECB todos los búferes deben ser múltiplos de 16 bytes. Para el relleno se recomienda PKCS7.
  • El modo ECB se considera inseguro para la mayoría de los usos y no está implementado en modo de flujo. Si necesitas este modo, llama a la función para cada bloque de 16 bytes que necesites cifrar. Consulta el artículo de Wikipedia sobre ECB para más detalles.
  • Esta biblioteca está diseñada para un tamaño de código pequeño y simplicidad, pensada para casos donde el tamaño binario reducido, el bajo uso de memoria y la portabilidad son más importantes que el alto rendimiento. Si la velocidad es una preocupación, puedes probar bibliotecas más complejas, p. ej. Mbed TLS, OpenSSL, etc.

Puedes elegir usar cualquiera o todos los modos de operación, definiendo los símbolos CBC, CTR o ECB en aes.h (lee los comentarios para aclaraciones).

Los usuarios de C++ deben #include aes.hpp en lugar de aes.h

No hay comprobación de errores incorporada ni protección contra accesos a memoria fuera de los límites como resultado de entradas maliciosas.

El módulo usa menos de 200 bytes de RAM y 1-2K de ROM cuando se compila para ARM, pero puede variar según los modos habilitados.

Es una de las implementaciones más pequeñas en C que he visto hasta ahora, pero no dudes en contactarme si conoces alguna más pequeña (o si tienes mejoras para el código).

He usado el código con éxito en plataformas x86 de 64 bits, ARM de 32 bits y AVR de 8 bits.

Salida de tamaño de GCC cuando solo se compila el modo CTR para ARM:

$ arm-none-eabi-gcc -Os -DCBC=0 -DECB=0 -DCTR=1 -c aes.c
$ size aes.o
   text    data     bss     dec     hex filename
   1171       0       0    1171     493 aes.o

.. y al compilar para el conjunto de instrucciones THUMB, terminamos muy por debajo de 1K en tamaño de código.

$ arm-none-eabi-gcc -Os -mthumb -DCBC=0 -DECB=0 -DCTR=1 -c aes.c
$ size aes.o
   text    data     bss     dec     hex filename
    903       0       0     903     387 aes.o

Estoy usando el compilador ARM GCC de la Free Software Foundation:

$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (4.8.4-1+11-1) 4.8.4 20141219 (release)
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Esta implementación está verificada contra los datos de:

Special Publication 800-38A del Instituto Nacional de Estándares y Tecnología, edición 2001 Apéndice F: Vectores de ejemplo para modos de operación del AES.

Los otros apéndices del documento son valiosos para detalles de implementación, p. ej., relleno, generación de IVs y nonces en modo CTR, etc.

Un sincero agradecimiento a todas las buenas personas que han contribuido a este proyecto.

Todo el material de este repositorio es de dominio público.

Descargar herramienta