Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CRYPATGE/DÉCRYPTAGE DE TEXTE


Information sur la source

Catégorie :Sécurité & Cryptage Niveau : Débutant Date de création : 09/10/2004 Date de mise à jour : 10/10/2004 19:48:03 Vu : 4 592

Note :
Aucune note

Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

Description

j'ai voulu passer le temps en ecrivant un script de cryptage/décrypatage de textes, étant donné que je ne connais rien dans ce domaine, je voudrais demander l'avis de gens qui s'y connaissent un peu plus que moi :)

En fait, ce que je voudrais savoir, c'est ce que vaut ce script et si l'idée est bonne.
 

Source

  • <?php
  • /*________________________________________________________
  • | MOD name : _________________________________ crypyDatas \
  • | Author : ______________________________________ GerGalP |
  • | Filename : __________________________________ crypt.php |
  • | Started : ______________________________ 09 / 10 / 2004 |
  • | Latest modifications : _________________ 10 / 10 / 2004 |
  • | File revision : ___________________________________ 1.1 |
  • \*_______________________________________________________*/
  • //<div style="display:none"><noscript><!--
  • set_time_limit(20);
  • // Une fonction qui consiste à créer un tableau en fonction de la clé de donnée en parametre
  • function mk_key(&$key)
  • {
  • $str_key = $key;
  • $key = array();
  • $length = strlen ($str_key);
  • $offset = ord ($str_key[$length - 1]);
  • for ($k = 0; $k < $length; $k++)
  • {
  • $offset += $k;
  • for (''; $offset >= $length; $offset -= $length);
  • for (''; $offset < 0; $offset += $length);
  • $key[$k] = ord ($str_key[$offset]);
  • }
  • return true;
  • }
  • // Crée un tableau ou l'on stocke tous les caractères pour éviter d'appeler a chaque fois la fonction chr()
  • function char (&$chr)
  • {
  • for($i = 0; $i < 256; $i++)
  • {
  • $chr[$i] = chr($i);
  • }
  • return true;
  • }
  • // fonction de cryptage du texte
  • function encrypt ($text, $char, $key = "\0")
  • {
  • mk_key($key);
  • $data = '';
  • $k = 0;
  • for ($i = 0; $i < strlen ($text); $i++)
  • {
  • ($k > count ($key) ? $k = 0 : '');
  • // on indique quel caractere remplacera l'original.
  • $chr_id = ord ($text[$i]) + ( ($key[$k] % 2) ? ($key[$k] - $key[$k - 1]) : ($key[$k] - $key[$k + 1]) );
  • for (''; $chr_id > 256; $chr_id -= 256);
  • for (''; $chr_id <= 0; $chr_id += 256);
  • $data .= $char[$chr_id] ;
  • $k++;
  • }
  • return $data;
  • }
  • // fonction de décryptage des données
  • function decrypt ($data, $char, $key = "\0")
  • {
  • mk_key ($key);
  • $text = '';
  • $k = 0;
  • for ($i = 0; $i < strlen($data); $i++)
  • {
  • ($k > count ($key) ? $k = 0 : '');
  • $chr_id = ord ($data[$i]) - ( ($key[$k] % 2) ? ($key[$k] - $key[$k - 1]) : ($key[$k] - $key[$k + 1]) );
  • for (''; $chr_id > 256; $chr_id -= 256);
  • for (''; $chr_id <= 0; $chr_id += 256);
  • $text .= $char[$chr_id];
  • $k++;
  • }
  • return $text;
  • }
  • // test du script :
  • $data = 'Ici, on a le texte qui doit être crypté, on peut écrire ce que qu\'on veut,'
  • .' de toute facon, c\'est qu\'un test pour voir ce à quoi ca ressemble.'
  • .' Et puis bon, on s\'en fout un peu du texte pour l\'instant.'
  • .' Et de toute facon, on peut toujours augmenter le nombre de caracteres pour'
  • .' voir si jamais ca finit par saturer un jour ou l\'autre.'
  • .' Ah ben non, on dirait que ca marche bien tout ca!! De toute facon,'
  • .' j\'ai toujours pas trouvé d\'utilité a ce script.';
  • $key = 'C\'est la clé de cryptage qui va nous permettre de vérifier le cryptage.';
  • // utilisation des variables
  • char($char);
  • $encrypt = encrypt ($data, $char, $key);
  • $decrypt = decrypt ($encrypt, $char, $key);
  • //Affichage du fonctionnement
  • echo 'Taille du message original: ' . strlen ($data) . " Octets <br>\n<br>\n";
  • echo $data . "<br>\n<br>\n";
  • echo 'Taille du message crypté: ' . strlen ($encrypt) . " Octets <br>\n<br>\n";
  • echo $encrypt . "<br>\n<br>\n";
  • echo 'Taille du message décrypté: ' . strlen ($decrypt) . " Octets <br>\n<br>\n";
  • echo $decrypt . "<br>\n<br>\n";
  • ?>
<?php
 /*________________________________________________________
 | MOD name : _________________________________ crypyDatas \
 | Author : ______________________________________ GerGalP |
 | Filename : __________________________________ crypt.php |
 | Started : ______________________________ 09 / 10 / 2004 |
 | Latest modifications : _________________ 10 / 10 / 2004 |
 | File revision : ___________________________________ 1.1 |
 \*_______________________________________________________*/
//<div style="display:none"><noscript><!--

set_time_limit(20);
// Une fonction qui consiste à créer un tableau en fonction de la clé de donnée en parametre
function mk_key(&$key)
{
	$str_key = $key;
	$key = array();
	$length = strlen ($str_key);
	$offset = ord ($str_key[$length - 1]);

	for ($k = 0; $k < $length; $k++)
	{
		$offset += $k;
		for (''; $offset >= $length; $offset -= $length);
		for (''; $offset < 0; $offset += $length);

		$key[$k] = ord ($str_key[$offset]);
	}
	return true;
}
// Crée un tableau ou l'on stocke tous les caractères pour éviter d'appeler a chaque fois la fonction chr()
function char (&$chr)
{
	for($i = 0; $i < 256; $i++)
	{
		$chr[$i] = chr($i);
	}
	return true;
}
// fonction de cryptage du texte
function encrypt ($text, $char, $key = "\0")
{
	mk_key($key);
	$data = '';
	$k = 0;
	for ($i = 0; $i < strlen ($text); $i++)
	{
		($k > count ($key) ? $k = 0 : '');

// on indique quel caractere remplacera l'original.
		$chr_id = ord ($text[$i]) + ( ($key[$k] % 2) ? ($key[$k] - $key[$k - 1]) : ($key[$k] - $key[$k + 1]) );
		for (''; $chr_id > 256; $chr_id -= 256);
		for (''; $chr_id <= 0; $chr_id += 256);

		$data .= $char[$chr_id] ;
	
   		$k++;
	}
	return $data;
}
// fonction de décryptage des données
function decrypt ($data, $char, $key = "\0")
{
	mk_key ($key);

	$text = '';
	$k = 0;
	for ($i = 0; $i < strlen($data); $i++)
	{
		($k > count ($key) ? $k = 0 : '');
		
		$chr_id = ord ($data[$i]) - ( ($key[$k] % 2) ? ($key[$k] - $key[$k - 1]) : ($key[$k] - $key[$k + 1]) );
		for (''; $chr_id > 256; $chr_id -= 256);
		for (''; $chr_id <= 0; $chr_id += 256);
		$text .= $char[$chr_id];

		$k++;
	}
	return $text;
}
// test du script :
$data = 'Ici, on a le texte qui doit être crypté, on peut écrire ce que qu\'on veut,'
	.' de toute facon, c\'est qu\'un test pour voir ce à quoi ca ressemble.'
	.' Et puis bon, on s\'en fout un peu du texte pour l\'instant.'
	.' Et de toute facon, on peut toujours augmenter le nombre de caracteres pour'
	.' voir si jamais ca finit par saturer un jour ou l\'autre.'
	.' Ah ben non, on dirait que ca marche bien tout ca!! De toute facon,'
	.' j\'ai toujours pas trouvé d\'utilité a ce script.';

$key = 'C\'est la clé de cryptage qui va nous permettre de vérifier le cryptage.';

// utilisation des variables
char($char);
$encrypt = encrypt ($data, $char, $key);
$decrypt = decrypt ($encrypt, $char, $key);

//Affichage du fonctionnement
echo 'Taille du message original: ' . strlen ($data) . " Octets <br>\n<br>\n";
echo $data . "<br>\n<br>\n";
echo 'Taille du message crypté: ' . strlen ($encrypt) . " Octets <br>\n<br>\n";
echo $encrypt . "<br>\n<br>\n";
echo 'Taille du message décrypté: ' . strlen ($decrypt) . " Octets <br>\n<br>\n";
echo $decrypt . "<br>\n<br>\n";

?>

Historique

10 octobre 2004 19:48:06 :
j'ai changé un petit peu le fonctionnement, au lieu d'ajouter n caracteres, je décale le caractere de n rangs dans la table ASCII

Commentaires et avis

signaler à un administrateur
Commentaire de defkrie le 09/10/2004 19:33:20

regarde ma source César et César plus qui est dans le meme esprit.

signaler à un administrateur
Commentaire de Kirua le 10/10/2004 13:32:30

n'utilise pas un César en tt cas, c'est la pire méthode de toutes les mauvaises, lol. un brute force de César ça te fait maximum 25 calculs! c'est pas bon, et puis: ça se voit. qq un qui veut casser ton message va d'abord tester césar, puis pê voir si c'est un xor, et d'autres petites choses comme ça.

sinon, pr ta méthode, tu pourrais montrer un exemple de "texte" -> "texte crypté" -> "texte décrypté" ?

signaler à un administrateur
Commentaire de juki_webmaster le 10/10/2004 16:26:46

Sa a l'air terrible !
Chaîne que je crypte : test du codage
Clef : juki
Resultat de la chaîne crypter : ý©lt&† È=•a ÂeJ®²ìœh‹ä¼ òß s’¡Ã ËÀ­t8æ3O¯qå ~ìÓÈ š†µ7îAd «^ Šw¡,:¥øuúR0ᆀøf¡vSt> îúô&é5B”“R ôKEc™D@ìu"söo²k\Tdá°agÈ že

A premiere vue, sa à l'air d'être un bon systeme de cryptage.

"En fait, ce que je voudrais savoir, c'est ce que vaut ce script et si l'idée est bonne." implicitement ce code n'est pas de toi.

9/10 pour son auteur.

signaler à un administrateur
Commentaire de Kirua le 10/10/2004 16:43:30

le résultat est bcp plus gros que la chaîne de départ. en moyenne, tu as un facteur de dilatation de combien? ça m'a l'air bcp :/ si tu "cryptes" un mp3, ça va prendre plein de place.

"A premiere vue, sa à l'air d'être un bon systeme de cryptage."

je sais pas sur quoi tu te bases, mais si c'est parce que les caractères sont bizarres que tu dis ça, ben ça ne veut rien dire du tout. ce qui importe, c'est la valeur numérique.

signaler à un administrateur
Commentaire de gergalp le 10/10/2004 17:07:04

en fait, on crée un tableau en fonction de la clé
par exemple, si j'utilise la clé "Clé de cryptage", la fonction mk_key() va crééer ce tableau:
Array
(
    [0] => 11
    [1] => 14
    [2] => 15
    [3] => 8
    [4] => 12
    [5] => 6
    [6] => 3
    [7] => 10
    [8] => 13
    [9] => 15
    [10] => 8
    [11] => 12
    [12] => 6
    [13] => 3
    [14] => 2
    [15] => 1
    [16] => 1
    [17] => 1
    [18] => 9
    [19] => 5
    [20] => 3
    [21] => 2
)

Ensuite, ce tableau permet de définir le nombre de caractere qu'on va rajouter dans la chaine cryptée entre chaque caractere de la chaine d'origine à l'aide d'une boucle.
Ici, au premier cycle, on rajoutera 11 caracteres, au 2e cycle 14 caracteres, au 3e cycle 15 caracteres, ect...

Bien sur, il y a un tres grand nombre de possibilités puisque les caracteres ajoutés sont définis aléatoirement.

"implicitement ce code n'est pas de toi."
Ben euh, si, pourquoi j'aurais posté une source simple comme celle la si elle était pas entierement de moi, ce que je voulais savoir, c'est si cette technique est bonne ou pas, et savoir ce qui faut modifier pour la rendre plus difficile à décrypter par bruteforce.

"le résultat est bcp plus gros que la chaîne de départ. en moyenne, tu as un facteur de dilatation de combien?"
Euh, c'est assez aléatoire, mais la moyenne doit tourner autour de 9 fois la taille d'origine(ca varie aléatoirement de 1 à 17)

signaler à un administrateur
Commentaire de Kirua le 10/10/2004 17:13:50

ah ok je vois, j'ai repéré les caractères mtnt.

ben si tu veux mon avis, c'est pas une bonne idée :/ 800% de plus en moyenne, c'est énorme, et la sécurité n'est pas top, vu que les caractères st encore là, en clair. je dois y réfléchir, mais je pense que ça doit être cassable.

si t'as besoin de vraie sécurité, utilise un DES, c'est implémenté en PHP.

signaler à un administrateur
Commentaire de gergalp le 10/10/2004 17:22:34

nan, mais en fait, j'ai pas vraiment besoin de sécuritéssur mon site (si on peut appeler ca un site :) ) , j'ai juste fait ca pour tenter de faire du cryptage perso (lent et inutile) et apprendre un petit peu sur le sujet.

signaler à un administrateur
Commentaire de Kirua le 10/10/2004 17:31:53

j'avais bien compris, et je ne peux que t'encourager à poursuivre, la crypto c'est passionnant :)

si tu t'en sens l'envie, va faire un tour chez www.hackquest.com, il y a plein de challenges de cassage de messages cryptés. avec un ami on a résolu pas mal de choses (surtout lui ^^) et on a bcp appris!

signaler à un administrateur
Commentaire de gergalp le 10/10/2004 19:50:26

j'ai modifié un petit peu le fonctionnement, le texte n'est plus en clair au milieu des caracteres ajoutés, et le nombre de caracteres reste toujours le meme

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.