AES-Encryption
En esta pagina enseñare como funciona una tool desarollada por mi para poder encriptar archivos usando la libreria tiny-aes
Este codigo no se puede usar en producción ya que es necesario remover tanto la clave hardcodeada y eliminar cualquier printf que muestre secretos
Definiciones iniciales
WIN32_LEAN_AND_MEANreduce macros innecesarias delwindows.hbcrypt.hse usa paraBCryptGenRandom(RNG de Windows)crypto/aes.hes la API de tiny-aes que se usa (proporcionaAES_ctx,AES_init_ctx_iv,AES_CBC_encrypt_buffer)
checkPadding
bool checkPadding(unsigned char payload[], size_t sizePayload) {
return (sizePayload % 16 == 0)
? true
: false;
}Devuelve
truesisizePayloadya es múltiplo de 16 (tamaño de bloque AES),falsesi noAES-CBC en tiny-aes requiere que el buffer a cifrar tenga longitud múltiplo de 16 bytes
fillPadding
void fillPadding(unsigned char payload[], size_t sizePayload, unsigned char **newPayload, size_t *newSize) {
size_t size = ((sizePayload + (15)) / 16) * 16;
unsigned char *pNewpayload = (unsigned char *) malloc(size);
if (!pNewpayload) {
*newPayload = NULL;
*newSize = 0;
return;
}
memcpy(pNewpayload, payload, sizePayload);
memset(pNewpayload + sizePayload, 0x00, size - sizePayload);
*newSize = size;
*newPayload = pNewpayload;
}Calcula el siguiente múltiplo de 16 para
sizePayloadReserva
sizebytes conmallocCopia
sizePayloadbytes desdepayloada la nueva áreaRellena el resto con ceros (
0x00)Devuelve el puntero en
*newPayloady tamaño en*newSize
encriptar
Comprueba
encryptedPayloadyencryptedPayloadSizeno nulos. Bien evitar writes a punteros nulosNo comprueba
must_free(se asume que es válido si se pasa)
A continuación proporciono el enlace al código completo en mi github
Última actualización