Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/07/2006, 15h59   #1
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 72
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 72
Points : 25
Points : 25
Par défaut [Sécurité] Cryptage simple d'entier

Bonjour je voudrai savoir comment faire pour modifier un créer à partir d'un entier simple (12, 25, 49, ...) une chaine alpha-numérique pour éviter de repérer mon entier (j'utilise un auto-incrément). De plus je voudrai que cette fonction soit bijective, donc pas d'utilisation de md5() car. Merci de votre aide
Florent08800 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 16h41   #2
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
si elle est bijective, elle est cassable donc ...

juste pour comprendre, tu t'en sers dans quoi ?
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h03   #3
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 72
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 72
Points : 25
Points : 25
Cela me dérange pas que cela soit cassable, je veux juste masquer l'entier qui est issu de ma base par auto-incrément à l'utilisateur par exemple comme par-exemple pour masquer le numéro d'un ticket, etc... afin d'éviter d'avoir ticket n°1.

ce traitement est juste au niveau de l'affichage, je ne veux pas stocker l'entier crypter dans ma base.
Florent08800 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h10   #4
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
Citation:
ce traitement est juste au niveau de l'affichage, je ne veux pas stocker l'entier crypter dans ma base.
affichage ?
ou passage en GET ?

c'est vraiment grave si le mec voit ticket 1 ? ca rend ton site cassable ?
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h16   #5
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 72
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 72
Points : 25
Points : 25
non en affichage, j'ai pas envie de lui montrer si mon site est réactif ou pas, donc juste un petit algo de cryptage bijectif me suffirait
Florent08800 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h20   #6
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
pourquoi bijectif alors ? si c'est juste pour afficher, pourquoi ne pas afficher un md5() de cela ?
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h30   #7
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 72
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 72
Points : 25
Points : 25
par exemple dans le cas d'un numéro de commande, si un client appele et dit j'ai un soucis sur ma commande ea12b568 je pourrai pas retrouver sa commande
Florent08800 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h35   #8
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
oki en gros tu veux un chiffre, mais tu veux pas qu'il voit que c'est le premier mec à venir sur ton site ?
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h39   #9
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 72
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 72
Points : 25
Points : 25
oui voilà exactement pour masquer l'activité de mon site
Florent08800 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h40   #10
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
oui mais le truc, il faut que ton chiffre grand soit unique ...
et ca c'est pas facile ...

P.S : tu peux toujours partir de 148373 et voila comme ça t'es content.

Allez ++
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h55   #11
Membre actif
 
Inscription : juillet 2004
Messages : 277
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 277
Points : 166
Points : 166
Le problème d'un grand nombre, c'est que si quelqu'un vient un dimanche et reviens le dimanche d'après, il verra le nombre de commandes passées entre les deux dates. Il lui suffira de faire une soustraction des 2 nombres pour avoir le nombre de commande pendant une semaine.
Ce n'est donc pas la solution.

Le problème est le suivant. Sur le site de e-commerce, on a une base de données avec un numéro de commande auto-incrémenté.

Donc une personne qui passe 2 commandes pendant un certain délai peut connaître exactement le nombre de commandes passées dans cet intervalle.

Il faut donc qu'on génère un nombre qui n'indique pas le nombre de commandes passées entre 2 dates de commandes.
Le MD5 ne convient pas, car si le client appelle et donne son numéro MD5, nous ne pourrons pas retrouver son vrai numéro de commande.
MD5 est très bien pour stocker des mots de passe, mais c'est mauvais dans notre cas.

Un cryptage serait bon dans notre cas, le problème, c'est qu'il faudrait que la version cryptée du numéro de commande soit simple. Il faut pas que le numéro de commande fasse 64 chiffres et que le client nous donne ça.
Il nous faudrait simplement une chaine d'à peu près 6 à 10 chiffres seulement.

Connaissez-vous un algo de cryptage qui puisse fonctionner dans notre cas?

Merci!
__________________
Хајде Јано коло да играмо
SuperCed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 18h00   #12
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
pourquoi ne pas faire un champ id et champ id_fake dans votre table
et dans id_fake vous mettez ce que vous voulez pour le client
vous pouvez prendre les 10 premier chiffre du md5, faire un randid. etc ...

Sinon pour les scripts il doit en avoir sur internet, suffit de chercher.

Moi je trouve stupide de vouloir cacher cela ...
ou alors vous faites des commande avec le nom du mec suivit d'un numéro
et ca sera sa premiere commande, et sa deuxieme commande, il saura pas si les autres en ont fait ...
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 10h52   #13
Membre actif
 
Inscription : juillet 2004
Messages : 277
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 277
Points : 166
Points : 166
Le md5 ne me plait pas.
Je vais tenter d'expliquer.
En fait, même en utisant le md5 avec une valeur aléatoire et de le stocker dans un champ, rien ne prouve qu'on ne tombera pas deux fois sur le même nombre.
Et là, si on essaye de retrouver la commande, on va tomber sur 2 commandes!!!
Laquelle prendre, là c'est un peu hasardeux.
Je suis d'accord que cela ne devrait arriver que rarement, mais je n'ai pas envie qu'on ait ensuite des problèmes à cause de ça.

Quand à la stupidité de cacher le nombre de commandes, elle n'est pas mienne. De plus, je ne pense pas que cela soit si stupide.
En effet, il existe de la concurrence sur certains marchés, et le fait de donner le nombre de commandes passées sur un site peut donner une information de valeur.
Le but est de donner le minimum d'information à la concurrence. Pour nous, si nous pouvions avoir le nombre de commandes de nos concurrents, cela nous aiderait bien à évaluer le nombre de produits à commander chez nos fournisseurs.
Il est donc préférable, même dans le doute, d'éviter de donner cette information.

Ta deuxième idée est par contre très intéressante. Le fait de donner un numéro de commande avec le nom et le nombre de commande par utilisateur est très bonne.
Nous allons réfléchir à cette solution. Peut être allosn nous simplement concaténer le numéro de client avec son nombre de commande.

Merci beaucoup pour l'idée, c'est "stupide" de notre part de ne pas y avoir pensé avant ;-)
__________________
Хајде Јано коло да играмо
SuperCed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 13h28   #14
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Personnellement, je comprend parfaitement son inquiétude car je suis dans le e-commerce et je me retrouve dans le même cas que lui. Moi j'ai opté pour une numéro de commande généré par divers critères.
Dans ma table commande il y aura bien un id utilisable uniquement pour l'usage interne mais il y aura un autre champs "num commande" qui lui est généré par un script que tu devras reflechire. Par sécurité il ne faut pas associé l'identifiant unique de la table commande au numéro de la commande car c'est trop dangereux. Pas besoin de MD5() car comme il le souligne il faut que ça reste compréhensible pour le client.
un numéro de commande de la sorte : xxx-xxx-xxx-xxx ouvre beaucoup de possibilité. Via ce script il ne sera pas possible de remonter les informations.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 14h21   #15
Membre émérite
 
Avatar de guitou12
 
Guillaume
Inscription : juillet 2006
Messages : 813
Détails du profil
Informations personnelles :
Nom : Guillaume
Âge : 29

Informations forums :
Inscription : juillet 2006
Messages : 813
Points : 905
Points : 905
Envoyer un message via MSN à guitou12
Pour reprendre l'idée de Maxoo le mieux est de prendre le nom du client (pas forcément unique) concaténé à la date de la commande (pas unique non plus) et tu peux rajouter l'heure+minutes+secondes+milisecondes (si tu arrives à avoir 2 fois la même chapeau

DUPOND1007061543251 ça me semble pas mal non ?
guitou12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2006, 14h30   #16
Membre éprouvé
 
Inscription : février 2005
Messages : 401
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2005
Messages : 401
Points : 450
Points : 450
Pourquoi pas un truc tout simple ?
Genre pour chaque chiffre du numéro de commande, tu remplaces par la lettre correspondante (A=1,B=2 ...).
Et après histoire d'embrouiller un peu tu décalles ces lettres, un truc comme avec la fonction str_rot13() par exemple.

Comme ça ta chaine est "pseudo cryptée", et tu peux facilement retrouver le numero d'origine.
J'ai bon ou jsuis à coté de la plaque ?
Sylvain71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 15h20   #17
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 72
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 72
Points : 25
Points : 25
Par défaut Solution trouvée

Merci pour toutes ses idées aussi intéressantes les unes que les autres. Finalement on a opté pour un système efficace mais surement complexe pour l'utilisation que l'on veut en faire.

D'abord on crypte le numero de commande issu d'un auto-incrément avec la fonction mcrypt_encrypt en utilisant l'algo xtea en mode ecb. Ensuite on code le resultat crypté en hexa-décimal pour avoir un numéro de commande de 16 charactère hexa-decimal.

Et pour retrouver le numéro de commande (entier issu d'un auto-incrément) on décode la chaine hexa-decimale puis on décrypte avec mcrypt_decrypt. Voilà le tour est joué.

Merci de toutes vos remarques avisées.
Florent08800 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 15h21   #18
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
Citation:
Envoyé par Florent08800
Merci pour toutes ses idées aussi intéressantes les unes que les autres. Finalement on a opté pour un système efficace mais surement complexe pour l'utilisation que l'on veut en faire.

D'abord on crypte le numero de commande issu d'un auto-incrément avec la fonction mcrypt_encrypt en utilisant l'algo xtea en mode ecb. Ensuite on code le resultat crypté en hexa-décimal pour avoir un numéro de commande de 16 charactère hexa-decimal.

Et pour retrouver le numéro de commande (entier issu d'un auto-incrément) on décode la chaine hexa-decimale puis on décrypte avec mcrypt_decrypt. Voilà le tour est joué.

Merci de toutes vos remarques avisées.
et donc votre client, il doit vous dire un numéro de commande hyper compliqué.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 15h25   #19
Membre émérite
 
Avatar de guitou12
 
Guillaume
Inscription : juillet 2006
Messages : 813
Détails du profil
Informations personnelles :
Nom : Guillaume
Âge : 29

Informations forums :
Inscription : juillet 2006
Messages : 813
Points : 905
Points : 905
Envoyer un message via MSN à guitou12
Plus c'est compliqué plus ça fait sérieux
__________________
Le . est la base de toute bonne concaténation, marre de voir des
echo "Mavar1 = $toto et Mavar2 = $titi";
ou pire echo 'Mavar1 = ',$toto,' et Mavar2 = ',$titi;
pratiquez plutôt le echo 'Mavar1 = '.$toto.' et Mavar2 = '.$titi;
guitou12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2006, 15h26   #20
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 72
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 72
Points : 25
Points : 25
Effectivement, il doit nous dire une chaine assez compliqué mais cependant il ne nous contactera pas si souvent que cela, c'est surtout au niveau d'un retour d'un produit qu'il devra le préciser.

C'est vrai que cela est compliqué, au moins la concurrence n'est pas prêt de voir l'evolution de commandes.
Florent08800 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h21.


 
 
 
 
Partenaires

Hébergement Web