/*********************************************************************************************
* Valhalla.fr :: Encodage ROT
* http://asgard.valhalla.fr/nat/
* Copyright (c) 2007 Guillaume Florimond
*
* Version 0.1 (02/08/2007)
* Chiffrement/Déchiffrement d'une adresse e-mail avec code source prêt à copier/coller.
* Algorithmes disponibles : ROT-13, Base64, MD5, SHA1, CRC32.
* Implémentation de la structure permettant de gérer les algorithmes
* Implémentation de l'interface graphique
*********************************************************************************************/
// Propriétés à modifier par l'utilisateur, si nécessaire
/* Le mode DEBUG doit-il être activé ? (very verbose...) */
$debug = true;
// NE PAS MODIFIER EN DESSOUS DE CETTE LIGNE !!
?>
Valhalla::Asgard-Chiffrement
/* Empêcher l'affichage des WARNING */
if(!$debug) error_reporting(0);
/* Variables GLOBALES */
$algo = "";
$dshow = false; /* Afficher la chaîne chiffrée dans la zone de texte "déchiffrer" ? Défaut: NON */
//----------------------------------------------
// PHASE 1: afficher le formulaire -------------
//----------------------------------------------
?>
Valhalla.fr : Protection des données
/* Doit-on afficher le bloc d'aide ?*/
/* Il apparaît que cacher le bloc et appeler flush() ne donne pas de bons résultats ; il vaut mieux carrément de pas l'afficher lorsqu'on continue l'analyse. */
if(isset($_GET['q']) and $_GET['q'] == "s2") $d_aide = "none";
else $d_aide = "block";
?>
Aide
Protection des adresses e-mail
- Pour insérer votre adresse e-mail dans une page Web :
- Pour chiffrer une adresse e-mail, entrez l'adresse dans le champ de texte "Chiffrer" et cliquez sur le bouton "< Chiffrer >".
Vous pouvez copier le code généré et le coller directement dans vos pages HTML.
- Pour déchiffrer une adresse e-mail, copiez le code source dans le champ de texte "Déchiffrer" et cliquez sur le bouton "< Déchiffrer >".
- Pour insérer votre adresse e-mail sur un forum ou un blog :
- Pour chiffrer... (bientôt)
- Pour déchiffrer... (bientôt)
Utilisation avancée
- Pour chiffrer ou déchiffrer un texte, copiez-le dans le champ de texte idoine et cliquez sur "< Chiffrer >" ou sur "< Déchiffrer >".
- Activer l'option Générer le code source pour générer un code HTML/JavaScript que vous pourrez copier/coller dans vos pages Web. Pour protéger un code HTML, chiffrez-le en cochant cette case. La méthode de chiffrage employée (ROT-13) n'est pas "sûre", mais elle empêche les robots d'interpréter votre code source.
- Pour extraire et déchiffrer le texte original depuis le code source ainsi généré, cochez la case Depuis le code source. Copiez ensuite le code source et collez-le dans le champ de texte "Décrypter". Cliquez sur "< Décrypter >".
- Certains algorithmes permettent le déchiffrement des données en utilisant un algorithme inversé. Il s'agit du ROT-13 et du Base64.
- Certains algorithmes ne permettent pas le déchiffrement des données ; le chiffrement est alors une opération à sens unique. Il s'agit des algorithmes MD5, SHA1 et CRC32.
- Le code source HTML/JavaScript généré pour la protection des adresses e-mail par l'algorithme ROT-13 est celui utilisé par TextMate de Macromates.
//----------------------------------------------
// PHASE 2: traitement -------------------------
//----------------------------------------------
if(isset($_GET['q']) and $_GET['q'] == "s2")
{
/* Chiffrer */
if(isset($_GET['t']) and $_GET['t'] == "chf")
{
/* Récupérer le texte à chiffrer */
$original = $_POST['chiffrer'];
/* Appel de l'algo */
$result = cypher($original);
/* Pour l'affichage... */
$aff = "chiffré";
$oldresult = $result;
/* Doit-on ajouter le code HTML/JavaScript pour copier-coller ? */
if($_POST['gencode'] == "oui")
$result = addcode($result);
/* Mettre la chaîne dans les textareas */
echo "";
ob_flush(); flush();
ob_flush(); flush();
}
/* Déchiffrer */
elseif(isset($_GET['t']) and $_GET['t'] == "dhf")
{
$original = $_POST['dechiffrer'];
/* Pour l'affichage... */
$aff = "déchiffré";
/* Doit-on analyser le code source et en extraire la chaîne à convertir ? */
if($_POST['gendecode'] == "oui")
$result = stripcode($original);
else
$result = $original;
/* Appel de l'algo */
$result = cypher($result, false);
/* Re-chiffrer la chaîne pour l'afficher dans le textarea "déchiffrer" */
$dhf = cypher($result);
/* Mettre la chaîne dans les textareas */
echo "";
ob_flush(); flush();
ob_flush(); flush();
}
/* Erreur */
else { echo "Erreur : données manquantes !"; }
/* Afficher les résultats */
?>
Texte (Algorithme )
Texte original
}
else {;}
// -- Fin du traitement
?>
document.write("';
$c2 = '".replace(/[a-zA-Z]/g, function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);}));';
return htmlentities($c1).$input.htmlentities($c2);
}
/* Cette fonction retire le code HTML/JS pour en extraire la chaîne à décoder */
function stripcode($input)
{
/* Enlever les espaces superflus */
$input = trim($input);
/* Localiser l'adresse e-mail au milieu du code JavaScript */
$input = explode("\"", $input); /* Le 3ème élément du tableau est l'e-mail */
/* Protection si le explode rate (= si l'utilisateur n'est pas foutu de faire un copier/coller) */
if(!isset($input[3])) return $input[0]; else $input = $input[3];
/* Si vous lisez ce code source et que vous vous demandez pourquoi on n'utilise pas ici les fonctions preg_match() ou ereg_match(), vous obtiendrez une réponse en consultant l'expression régulière (monstrueuse) qui décrit la norme RFC822 régissant le formatage des adresses e-mail. Elle est disponible à l'adresse suivante : http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html */
/* Remplacer \100 par @ */
$input = str_replace('\100', '@', $input);
/* Remplacer \056 par . */
$input = str_replace('\056', '.', $input);
/* Enlever les slash ... mais pourquoi des slash apparaissent-ils ?? */
$input = stripslashes($input);
return $input;
}
/* Cette fonction appelle les méthodes de traitement de l'algo spécifié */
function cypher($input, $encode = true)
{
/* Définit si un décryptage est possible */
global $dshow, $algo;
if(isset($_POST['chfcypher'])) $cypher = $_POST['chfcypher'];
elseif(isset($_POST['dhfcypher'])) $cypher = $_POST['dhfcypher'];
else $cypher = "rot13";
/* MD5 */
if($cypher == "md5")
{ $dshow = false; $algo = "MD5"; return md5($input); }
/* SHA1 */
elseif($cypher == "sha1")
{ $dshow = false; $algo = "SHA1"; return sha1($input); }
/* CRC32 */
elseif($cypher == "crc32")
{ $dshow = false; $algo = "CRC32"; return crc32($input); }
/* Base64 */
elseif($cypher == "base64")
{ if($encode)
{
$dshow = true; $algo = "Base64"; return base64_encode($input);
}
else
{
$dshow = true; $algo = "Base64"; return base64_decode($input);
}
}
else
{ $dshow = true; $algo = "ROT-13"; return str_rot13($input); } /* par défaut */
}
?>