Système de Chiffrement / Dechiffrement pour les nuls !

095890

 

Salut les Dyrkiens !

 

Bon en travaillant sur mon proxy ... et oui, encore lui !
Je me suis dis, qu'il serait bon de rendre chaque pages consultées par un internaute, unique.
En gros, que le contenu qu'il voit, soit 'chiffré', et uniquement déchiffrable avec une clé unique valable le temps de sa session.

 

Le Proxy travaillant sur des technologies JavaScript et PHP, j'ai du créer des fonctions de Chiffrement et de Déchiffrement qui fassent le même job, et ce, dans les 2 sens.
Que JavaScript puisse encrypter des données, récupérables par PHP, et l'inverse.

 

Je connais bien Crypto-JS, mais je voulais quelques choses de vraiment simpliste, de plus ... personnel, et qui marche à chaque fois, en PHP comme en Javascript ... et sans problème d'encodage avec caractères foireux ...
Car les données passent en GET et en POST

 

Pour vous éviter des heures de taff, je me permet de vous partager un peu mon code :

 

En JavaScript :

 

function encrypt(msg, key) { 
	i   = 0;
	tmp = msg;
	while (msg.length - 1 >= i ){
		tmp = tmp.replaceAt(i, chr(ord(tmp.charAt(i)) + parseInt(key)))	
		i++;
	}
	tmp =  base64_encode(tmp);
	return tmp;
}



function decrypt(msg, key) { 
	 i  = 0;
        tmp = base64_decode(msg);
        while (tmp.length - 1 >= i ){
                tmp = tmp.replaceAt(i, chr(ord(tmp.charAt(i)) - parseInt(key)));
                i++;
        }
	return tmp;
}
Chiffrement / Déchiffrement - Javascript

Vous retrouverez les fonctions JavaScript  :

chrhttp://phpjs.org/functions/chr/
ordhttp://phpjs.org/functions/ord/

base64_decodehttp://phpjs.org/functions/base64_decode/
base64_encodehttp://phpjs.org/functions/base64_encode/

 

Maintenant pour la partie PHP, c'est plus simple, car toutes les fonctions sont déjà prévu :)

 

function encrypt($msg,$key) {
        $i   = 0;
        $tmp = $msg;
        while (strlen($msg) - 1 >= $i ){
                $tmp[$i] = chr(ord($tmp[$i]) + intVal($key));
                $i++;
        }
        $tmp =  base64_encode($tmp);
        return $tmp;
}

function decrypt($msg, $key) {
        $i  = 0;
        $tmp = base64_decode($msg);
        while (strlen($tmp) -1 >= $i ){
                $tmp[$i] = chr(ord($tmp[$i]) - intVal($key));
                $i++;
        }
        return $tmp;
}
Chiffrement / Dechiffrement - PHP

 

Le chiffrement est minimaliste et pas hyper sécure
( la clé doit être forcément un chiffre ou un nombre )

 

Utilisation Javascript :
test = encrypt( "Coucou Petit Lapinou !!! ",   "15"  );
decrypt( test , "15" );

Utilisation PHP :
$test = encrypt( "Coucou Petit Lapinou !!! ",   "15"  );
decrypt( $test , "15" );

 

Pour ceux qui souhaite un peu comprendre le "comment ça fonctionne"

 

La fonction de chiffrement récupère une chaîne de caractère, et modifie chaque caractères en incrémentant son code Ascii avec la valeur de la "clé", puis j'encode le tout en base64

Pour ceux qui ne savent pas ce qu'est le Code Ascii :
C'est une correspondance entre chaque caractères de votre clavier avec un nombre, tel que montré ci-dessous.

 

 

ascii

 

 

Si ma clé est 15 et que mon mot est toto :

Je prends la lettre " t "
Son code Ascii est : 116
Je l'augmente de 15 => 116 + 15 = 131
Ensuite je récupère le caractère correspondant au code ascii 131 : " â "
Je fais de même avec la lettre " o "
Code Ascii : 111
Code Ascii modifié : 111 + 15 => 126
Caractère correspondant au nouveau code Ascii : " ~ "

 

Ce qui me donne au final " â~â~ "

Que j'encode ensuite en base64 : " w6J+w6J+ "

Pour ce qui est du déchiffrement c'est l'inverse ...

Je décode le base 64, et je fais la même chose que le chiffrement, mais au lieu d'ajouter 15 à chaque caractères, je le déduis !

 

Et voilà ;) Simple, mais qui pourra surement vous filer des petits coups de pouces, ou vous inspirer des idées !

Partagez ce contenu

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *