[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.
|
Listato 14.2. Apertura di un algoritmo di cifratura. #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