Cette classe fonctionne très simplement:

Elle est initialisée avec une phrase qui servira de clé (en fait nous utilisons son calcul SHA1), et deux méthodes sont utilisables: code et decode.

Encodage

Pour chaque caractère de la chaîne à protéger, nous allons prendre un caractère particulier de la clé et nous allons ajouter sa valeur ASCII à la valeur ASCII du caractère considéré. Une fois cette translation effectuée sur toute la chaîne, nous encodons le résultat en base64.

Decodage

A l'inverse, nous décodons le base64 de la chaîne, puis pour chaque caractère de la chaîne obtenu, nous allons prendre le même caractère de la clé et nous allons soustraire sa valeur ASCII à la valeur ASCII du caractère considéré.

Code source

<?php
/**
 * Classe de cryptage réversible de données
 * 
 * Cette classe permet de coder ou décoder une chaïne
 * de caractères
 * 
 * @author CrazyCat <[email protected]>
 * @copyright 2007 http://www.g33k-zone.org
 * @package Mephisto
 */
 
class RevCrypt {
 
	/**
	 * Clé utilisée pour générer le cryptage
	 * @var string
	 */
	public $key;
 
	/**
	 * Données à crypter
	 * @var string
	 */
	public $data;
 
	/**
	 * Constructeur de l'objet
	 * @param string $key Clé utilisée pour générer l'encodage
	 */
	public function __construct($key) {
		$this->key = sha1($key);
	}
 
	/**
	 * Encodeur de chaîne
	 * @param string $string Chaîne à coder
	 * @return string Chaîne codée
	 */
	public function code($string) {
		$this->data = '';
		for ($i = 0; $i<strlen($string); $i++) {
			$kc = substr($this->key, ($i%strlen($this->key)) - 1, 1);
			$this->data .= chr(ord($string{$i})+ord($kc));
		}
		$this->data = base64_encode($this->data);
		return $this->data;
	}
 
	/**
	 * Décodeur de Chaîne
	 * @param string $string Chaîne à décoder
	 * @return string
	 */
	public function decode($string) {
		$this->data = '';
		$string = base64_decode($string);
		for ($i = 0; $i<strlen($string); $i++) {
			$kc = substr($this->key, ($i%strlen($this->key)) - 1, 1);
			$this->data .= chr(ord($string{$i})-ord($kc));
		}
		return $this->data;
	}
}
?>

Cryptage réversible