Bonjour, c'est mon premier message sur ce site !
Je suis à la recherche d'informations sur la génération de clé. Je m'explique, je développe une application que je vais bientôt mettre à disposition en alpha test (voir si le concept peut plaire à un petit panel) mais je souhaite faire ça bien et éviter que n'importe qui puisse s'inscrire. Pour ça je souhaiterai fournir des "clés" à ces personnes afin qu'elles puissent s'inscrire grâce à un code valide.
Je pourrais très bien générer une liste de codes à partir d'une chaine classique cependant j'aimerai faire un système identique aux clé CD que l'ont peux avoir sur nos produits logiciels (windows, jeux etc ...), quelque chose comme ça :
XXXX-XXXX-XXXX-XXXX
Le problème c'est que sur la toile on ne trouve que des générateurs de clé CD afin de cracker un logiciel et c'est pas vraiment ce qui m'intéresse (ou alors je ne cherche pas avec les bons critères). Je n'ai aucune idée de comment fonctionne ce genre de code (s'il y a une logique derrière ou si c'est simplement une liste de clé générées qui sont ensuite stockées et testé lorsqu'on les utilise).
Bref si quelqu'un pouvait m'éclaircir là dessus ça serait super !!
Merci d'avance
Orkin
Merci pour vos réponses j'ai créé ma petite fonction qui me génère mes clés dans mon format XXXX-XXXX-XXXX-XXXX et je les ai enregistrer en base avec un booléen "used" et une référence à la table membre afin de savoir qui a utilisé la clé.
Ma fonction a quand même un défaut c'est qu'elle ne vérifie pas si la clé existe déjà ou pas mais pour l'instant je n'ai que très peu de clés à gérer :).
Voici le bout de code si ça peut servir à d'autres (j'utilise doctrine comme orm donc les parties avec $em doivent être modifiée en fonction de vos besoins, même chose pour la classe RegisterKey qui est une entité doctrine) :
public function generatKey($nb, $label) {
$a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
$separator = '-';
$em = $this->getServiceManager()->get('orm_em');
for ($c = 1; $c < $nb; $c++) {
$key = array();
for ($i = 0; $i < 23; $i++) {
$l = rand(0, strlen($a) - 1);
$key[$i] = substr($a, $l, 1);
}
for ($i = 5; $i < 23; $i += 6) {
$key[$i] = $separator;
}
$registerKey = new RegisterKey();
$registerKey->setKeyvalue(implode($key))
->setLabel($label);
$em->persist($registerKey);
}
$em->flush();
}
Ba d'un côté ça n'a pas d'importance si il y a pas de logique, même c'est mieux, comme ça on ne sait pas comme cracké tes clés.
Sinon pour générer tes clé tu peux déjà générer un code de quatre caractères que tu passes avec différent cryptage PHP (md5, sha1). Voir un cryptage personnel. Et tu fais une boucle pour avoir 4 fois un code différent avec - entre chaque code.
JE dirais pareil tu stock dans une table les clefs valides, tu peux en générer en faisant md5(uniqid()) et à chaque fois qu'une clef est utilisé tu la supprime.