Classe d'objet de cryptage et décryptage de chaines de caractères

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 791 fois - Téléchargée 15 fois

Contenu du snippet

Cette classe d'objet permet de crypter et de décrypter des chaines de caractères de deux manières
- Cryptage standard : La chaine est cryptée en Rinjdael 256
- Haut cryptage : La chaine est cryptée trois fois Cast 256->Triple Des->Rijndael 128 (par défaut)

La restitution du cryptage se fait
- soit en hexadecimal (par défaut)
- soit avec les caractères cryptés d'origine

Source / Exemple :


<?php
/* Auteur Florent Bénetière : tnerolf@lekod.com
 *

  • Cette classe nécessite l'installation des modules mcrypt et mhash
  • Les algorithmes utilisés sont :
  • - Pour le hash : Sha 256
  • - Pour le cryptage :
  • - Rinjdael 128 et 256
  • - Triple Des
  • - Cast 256
  • Elle permet de crypter et de décrypter des chaines de caractères de deux manières
  • - Cryptage standard : La chaine est cryptée en Rinjdael 256
  • - Haut cryptage : La chaine est cryptée trois fois Cast 256->Triple Des->Rijndael 128 (par défaut)
  • La restitution du cryptage se fait
  • - soit en hexadecimal (par défaut)
  • - soit avec les caractères cryptés d'origine
  • /
class MCrypt { private $LaCle;//Clé utilisée pour le cryptage private $HtChiffrage;//Pour savoir si on effectue un triple cryptage (Cast 256->Triple Des->Rijndael 128) ou pas private $CrypteEnHexa;//Pour savoir si on transforme la chaîne cryptée en hexadecimal ou non //Cela sert, par exemple, à faire passer des chaînes cryptées dans un GET d'une URL public function __construct() { $this->LaCle=$this->Cle('L\'Homme est ce qu\'il sait'); $this->HtChiffrage=true; $this->CrypteEnHexa=true; } /**
  • Attribue une valeur à la clé utilisée pour crypter
  • @param string $ValCle Valeur de la clé
  • /
public function Cle($ValCle) { $this->LaCle=mhash(MHASH_SHA256,$ValCle); } /**
  • Détermine si le cryptage doit être triple (Cast 256->Triple Des->Rijndael 128) ou non
  • @param boolean $On Etat de la propriété.
  • Si true il y a triple cryptage, si false il y a simple cryptage (Rijndael 256)
  • /
public function ModeTripleCryptage($On=true) { $this->HtChiffrage=$On; } /**
  • Détermine si le cryptage est transformé en hexadécimal ou non
  • Cela sert, par exemple, à faire passer des chaînes cryptées dans un GET d'une URL
  • @param boolean $On Etat de la propriété.
  • Si true il y a chiffrage, si false non
  • /
public function ModeCrypteEnHexa($On) { $this->CrypteEnHexa=$On; } /**
  • @param string $Texte Texte à crypter
  • @return string Texte crypté
  • /
public function Crypte($Texte) { //On crypte la chaine de caractères if(!$this->HtChiffrage) { $Texte=mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$this->LaCle,$Texte,MCRYPT_MODE_CBC); } else { $Texte= mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$this->LaCle, mcrypt_encrypt(MCRYPT_TRIPLEDES,$this->LaCle, mcrypt_encrypt(MCRYPT_CAST_256,$this->LaCle,$Texte,MCRYPT_MODE_CBC), MCRYPT_MODE_CBC), MCRYPT_MODE_CBC); } return $this->CrypteEnHexa?$this->CastEnHexa($Texte):$Texte; } /**
  • @param string $Cryptage Texte à décrypter
  • @return string Texte décrypté
  • /
public function Decrypte($Cryptage) { if($this->CrypteEnHexa) $Cryptage=$this->CastEnHexa($Cryptage,false); if(!$this->HtChiffrage) { $Cryptage=mcrypt_decrypt(MCRYPT_RIJNDAEL_256,$this->LaCle,$Cryptage,MCRYPT_MODE_CBC); } else { $Cryptage=mcrypt_decrypt(MCRYPT_CAST_256,$this->LaCle, mcrypt_decrypt(MCRYPT_TRIPLEDES,$this->LaCle, mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$this->LaCle,$Cryptage,MCRYPT_MODE_CBC), MCRYPT_MODE_CBC), MCRYPT_MODE_CBC); } //Le décryptage comble des fois avec des \000 => On les enlève return preg_replace('~(?:\\000+)$~','',$Cryptage); } /**
  • Cette fonction transforme des caractères en héxadécimal
  • ou bien transforme des chaines hexadécimales en caractères.
  • @param string $Chaine Chaine de caractères à traiter
  • @param boolean $EnHexa Si $EnHexa=true on code $Chaine en hexadécimal
  • Si $EnHexa=false on décode $Chaine de hexadécimal vers alphanumérique
  • @return string
  • /
private function CastEnHexa($Chaine,$EnHexa=true) { if($EnHexa) { return bin2hex($Chaine); } else { return pack('H*',$Chaine); } } } ?>

Conclusion :


Voici ci-dessous le script de recette

<?php
include_once('[Chemin vers le fichier].php');
$Golum='Mon Précieux, mon ~Adoré~, je te garderai c\'est juré pour #toujours#';
echo $Golum.'<br>';
$Secu=new MCrypt();
//On change la clé
$Secu->Cle('Il était une fois c\'est chouette');
echo 'Objet par défaut => Haut Cryptage et restitution en héxadécimales.<br>';
$Golum=$Secu->Crypte($Golum);
echo $Golum.'<br>';
$Golum=$Secu->Decrypte($Golum);
echo $Golum.'<br>';
echo 'On passe en restitution des caractères cryptés<br>';
$Secu->ModeCrypteEnHexa(false);
$Golum=$Secu->Crypte($Golum);
echo $Golum.'<br>';
$Golum=$Secu->Decrypte($Golum);
echo $Golum.'<br>';
echo 'On passe en cryptage simple<br>';
$Secu->ModeTripleCryptage(false);
$Golum=$Secu->Crypte($Golum);
echo $Golum.'<br>';
$Golum=$Secu->Decrypte($Golum);
echo $Golum.'<br>';
echo 'On repasse en restitution hexadécimales<br>';
$Secu->ModeCrypteEnHexa(true);
$Golum=$Secu->Crypte($Golum);
echo $Golum.'<br>';
$Golum=$Secu->Decrypte($Golum);
echo $Golum.'<br>';
?>

A voir également

Ajouter un commentaire

Commentaire

cs_emilia123
Messages postés
122
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
5 janvier 2009
-
bonjour,

pour étaler ma science, il me semble qu'il faut parler de chiffrage/déchiffrage au lieu de cryptage/décryptage.
En effet, le décryptage se fait sans connaitre la clé de cryptage, contrairement au déchiffrage qui se base sur la clé utilisée pendant le chiffrage.
C'est un détail, mais ca peut faire toute la différence quand on sort ce sujet dans un diner mondain :)
EM.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.