Une petit classe PHP 5 créée aujourd'hui même suite à l'article de Ripat sur la librairie mcrypt disponible dans les didactitiels de PHPfrance :
http://www.phpfrance.com/tutoriaux/inde ... rypt-ripat
Un aperçu du résultat de l'utilisation est disponible ici :
http://ouaibou.info/classes/Crypt.class.php5
<?php
/**
* Class Crypt [PHP5]
*
* Permet une utilisation plus aisee de la librairie mcrypt.
*
* Classe realisee suite a un tres bon didactitiel d'introduction au
* cryptage avec la librairie de chiffrement mcrypt poste par Ripat
* sur PHPfrance : http://www.phpfrance.com/tutoriaux/index.php
*
* @author Ouaibou
* @version 2005.02.10
*/
class Crypt
{
private $algo; // Algorithme utilise
private $key; // Clef utilisee
private $mode; // Mode de chiffrement utilise
private $vector; // Vecteur d'initialisation utilise
/**
* Cre un nouvel objet
*
* @param String $algo Algorithme a utiliser pour le cryptage/decryptage (par defaut rijndael-256)
* @param String $key
* @param String $mode Mode de chiffrement a utiliser (par defaut nofb)
* @param String $vector Vecteur d'initialisation. Une valeur a \"rand\" permet de creer un vecteur pseudo aleatoirement
*/
public function __construct($algo, $key, $mode, $vector)
{
$this->setAlgo($algo);
$this->setMode($mode);
$this->setVector($vector);
$this->setKey($key);
}
/**
* Impression par defaut d'un objet de la classe Crypt
*/
public function __toString()
{
$msg = 'Algorithme de cryptage/décryptage utilisé : '.$this->getAlgo().'<br />';
$msg .= ' Mode de chiffrement utilisé : '.$this->getMode().'<br />';
$msg .= 'Vecteur d\'initialisation créé/utilisé : '.$this->getVector().'<br />';
$msg .= 'Vecteur d\'initialisation créé/utilisé ';
$msg .= '(base 64) : '.base64_encode($this->getVector());
return $msg;
}
/**
* @return String Renvoie un vecteur cree pseudo-aleatoirement
*/
public function createRandomVector()
{
return mcrypt_create_iv($this->getVectorSize(), MCRYPT_RAND);
}
/**
* Decrypte le texte crypte envoye en parametre
* Si ce dernier a ete crypte en base 64 il ne faut pas
* oublier de passer $decode a true
*
* @param String $txt Texte a decrypter
* @param boolean $decode Decrypte le texte en tant que texte encode en base 64 ou non
* @return String Renvoie le texte decrypte
*/
public function decrypt($txt, $decode=false)
{
if($decode)
$txt = base64_decode($txt);
return mcrypt_decrypt($this->algo, $this->key, $txt, $this->mode, $this->vector);
}
/**
* Crypte le texte envoye en parametre et renvoie si voulu
* le resultat encode en base 64.
*
* @param String $txt Texte a crypter
* @param boolean $encode Encode ou non le texte crypte en base 64
* @return String Renvoie le texte crypte
*/
public function encrypt($txt, $encode=false)
{
$crypt = mcrypt_encrypt($this->algo, $this->key, $txt, $this->mode, $this->vector);
if(!$encode)
return $crypt;
else
return base64_encode($crypt);
}
/**
* @return String Renvoie le nom de l'algorythme de cryptage/decryptage en cours d'utilisation
*/
public function getAlgo()
{
return $this->algo;
}
/**
* @return int Taille maximale de la clef a utiliser
*/
public function getKeyMaxSize()
{
return mcrypt_module_get_algo_key_size($this->algo);
}
/**
* @return String Renvoie le mode de chiffrement en cours d'utilisation
*/
public function getMode()
{
return $this->mode;
}
/**
* @return String Renvoie la valeur du vecteur d'initilisation
*/
public function getVector()
{
return $this->vector;
}
/**
* @return int Taille obligatoire a utiliser pour le vecteur
* d'initialisation
*/
public function getVectorSize()
{
return mcrypt_get_iv_size($this->algo, $this->mode);
}
/**
* Permet de modifier l'algorithme a utiliser
* @param String $algo
*/
public function setAlgo($algo)
{
if(trim($algo) == null)
$this->algo = 'rijndael-256';
else
$this->algo = $algo;
}
/**
* Permet de changer la clef de cryptage/decryptage
* @param String $key Clef de cryptage/decryptage
*/
public function setKey($key)
{
if(strlen($key) > $this->getKeyMaxSize())
$this->key = substr($key, 0, $this->getKeyMaxSize());
else
$this->key = $key;
}
/**
* Modifie le mode de chiffrement
* @param String $mode Mode de chiffrement a utiliser
*/
public function setMode($mode)
{
if(trim($mode) == null)
$this->mode = 'cbc';
else
$this->mode = mode;
}
/**
* Permet de creer un nouveau vecteur d'initialisation
* @param String $vector Vecteur a utilise
*/
public function setVector($vector)
{
if($vector === 'rand')
{
$this->vector = $this->createRandomVector();
}
else
{
if(strlen($vector) != $this->getVectorSize())
{
throw new Exception('La taille du vecteur d\'itinialisation doit être egale a '.$this->getVectorSize());
}
else
{
$this->vector = $vector;
}
}
}
}
///////////////////////////
// Exemple d'utilisation //
///////////////////////////
try
{
// Nouvel objet en utilisant l'algo et le mode de chiffrement par defaut
// Avec la clef "PHPfrance"
$crypt = new Crypt('', 'PHPfrance', '', 'rand');
// On crypte le texte "Plouf plouf"
// en utilisant un chiffrement base 64 pour l'affichage
$txt_encrypt = $crypt->encrypt('Ploufplouf', true);
echo 'Texte crypté : '.$txt_encrypt.'<br />';
// On decrypte le texte precedemment crypte
// en utilisant un dechiffrement base 64 car le texte a ete
// convertit en base 64 au prealable.
$txt_decrypt = $crypt->decrypt($txt_encrypt, true);
echo 'Texte décrypté : '.$txt_decrypt.'<br /><br />';
// On affiche les informations sur l'objet
echo $crypt;
}
catch(Exception $e)
{
echo $e->getMessage();
}
?>
@+