[successivo] [precedente] [inizio] [fine] [indice generale] [parte]
La libreria Mcrypt fornisce un'interfaccia comune per più algoritmi e metodi di cifratura. La programmazione è di tipo thread safe, ciò la rende adatta ad accessi simultanei di più processi (vedi appendice A).
Gli algoritmi di cifratura realizzati in Mcrypt possono funzionare con i metodi ECB, CBC, nCFB e nOCB; sia gli algoritmi che i metodi sono caricati a runtime.
Tabella 14.1. Lista degli algoritmi simmetrici di Mcrypt.
Algoritmo | Lunghezza blocco (bit) | Lunghezza chiave (bit) |
DES | 64 | 56 |
Triple DES | 64 | 56 |
CAST-128 | 64 | 128 |
CAST-256 | 128 | 256 |
xTEA | 64 | 128 |
3-WAY | 96 | 96 |
SKIPJACK | 64 | 80 |
BLOWFISH | 64 | 448 |
TWOFISH | 128 | 128, 192, 256 |
LOKI97 | 128 | 128, 192, 256 |
RC2 | 64 | 8 ... 1 024 |
ARCFOUR | stream | 1 ... 2 048 |
RC6 | 128 | 128, 192, 256 |
RIJNDAEL | 128, 192, 256 | 128, 192, 256 |
MARS | 128 | 128 |
PANAMA | stream | 256 |
WAKE | stream | 256 |
SERPENT | 128 | 128 |
IDEA | 64 | 128 |
GOST | 64 | 256 |
SAFER SK | 64, 128 | 64, 128 |
SAFER+ | 128 | 128, 192, 256 |
Per sviluppare applicazioni con Mcrypt è necessario richiamare il file mcrypt.h
. L'unico tipo utilizzato è MCRYPT che è un puntatore alla struttura CRYPT_STREAM e sever per inizializzare l'algoritmo di cifratura.
Il file definisce i tipi e i prototipi delle funzioni utilizzate dalla libreria.
Tipi definiti
#define MCRYPT_FAILED 0x0 struct CRYPT_STREAM; typedef struct CRYPT_STREAM *MCRYPT; |
Alcune funzioni
Ogni progetto dovrà necessariamente caricare il file mcrypt.h
mentre il linker dovrà richiamare la libreria libmcrypt.so
.
Gli esempi della dispensa possono essere tutti compilati con il comando seguente:
$
gcc -o esempio esempio.c -lmcrypt
[Invio]
Nell'esempio in listato 14.2 viene aperto un algoritmo di cifratura e vengono visualizzate le informazioni sostanziali per una corretta inizializzazione.
#define ALG "arcfour" #define MODE "stream" #include <stdio.h> #include <stdlib.h> #include <mcrypt.h> int main () { MCRYPT td; int block; int block_size; int key_size; int iv; // apre un algoritmo if (!(td = mcrypt_module_open (ALG, NULL, MODE, NULL))) exit (EXIT_FAILURE); if ((block = mcrypt_enc_is_block_algorithm (td))) printf ("Algoritmo a blocchi.\n"); else printf ("Algoritmo a stream.\n"); if ((iv = mcrypt_enc_mode_has_iv (td))) printf ("Utilizza un IV.\n"); else printf ("Non utilizza un IV.\n"); // calcola i bit del blocco e della chiave block_size = mcrypt_enc_get_block_size (td) * 8; key_size = mcrypt_enc_get_key_size (td) * 8; printf ("Lunghezza del blocco (bit): %d\n", block_size); printf ("Lunghezza della chiave (bit): %d\n", key_size); // rilascia le risorse occupate mcrypt_module_close (td); } |
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome mcrypt.html