2013-08-28 2 views
0

Mon code crée au hasard key et le stocke dans le database sur le bouton clic, keygen est le nom du bouton, if l'utilisateur/client a déjà la clé, il obtient la key de la base de données dans une zone de texte sur le clic else il génère un nouveau key et le stocke dans le database. Est-ce que je peux réaliser ceci sans stocker le key dans la base de données et obtenir la même clef pour un utilisateur/client particulier à chaque fois.Key Generator sans stockage dans la base de données

code:

<?php 
include('session.php'); 
$result = mysql_query("SELECT * FROM customer WHERE customer_no = '$customer_no'"); 
$row = mysql_fetch_array($result); 
if (isset($_POST['keygen'])){ 
$customer_no = $_POST['customer_no']; 
$customer_no = mysql_real_escape_string($customer_no); 
$result = mysql_query("SELECT * FROM customer WHERE customer_no = '$customer_no'"); 
while ($row = mysql_fetch_assoc($result)) { 
$keyString = $row['key']; 
if($keyString == ""){ 
$keyString = mysql_real_escape_string($keyString); 
$query = mysql_query("UPDATE customer SET `key` = '$keyString' WHERE customer_no = '$customer_no'"); 
} 
else{ 
$keyString = $row['key']; 
}}} 

function generateRandomString($length = 10) { 
$characters = '23456789ABCDEFGHJKMNPQRSTUVWXYZ'; 
$randomString = ''; 
for ($i = 0; $i < $length; $i++) { 
    $randomString .= $characters[rand(0, strlen($characters) - 1)]; 
} 
return $randomString; 
} 

?> 

Mon HTML est

<div id="content" class="box2"> 
<div class="login"> 
<form action="" method="post" style="margin:12px;"> 
<table class="nostyle"> 
<tr> 
<td align="center"> 
<label style="font-size:16px;"><strong>Customer ID: </strong></label> 
<select name="customer_no"> 
<?php $result_customer= mysql_query('SELECT customer_no FROM customer ORDER BY customer_no'); ?> 
<?php while($row_customer= mysql_fetch_assoc($result_customer)) { ?> 
<option <?php if ($row_customer['customer_no']=='') { ?> selected="selected"<?php } ?>> <?php echo htmlspecialchars($row_customer['customer_no']); ?> </option> 
<?php } ?> 
</select> 
</td> 
</tr> 
<tr> 
<td align="center"><label style="font-size:16px;"><br /><strong>Register Key: </strong> </label> 
<input type="text" id="key" class="input-text" name="key" size="20" align="middle" value = " <?=$row["key"];?>"></td> 
</tr> 
<td align="center"><br /><input type="submit" id="keygen" class="input-submit" name="keygen" value="Generate" onclick=""/> 
</td> 
</tr> 
</table> 
</form> 
</div> 
</div> 

S'il vous plaît aider, je suis un débutant.

Répondre

0

Une façon consiste à créer un hachage à partir d'une (ou de plusieurs) propriétés du client. Un hachage est une fonction qui crée une chaîne à partir d'une chaîne source. La même chaîne source générera toujours le même hachage. Mais vous devez gérer deux problèmes avec les hachages: vous ne pouvez pas générer la chaîne source à partir du hachage (car l'algorithme de hachage est non réversible) et vous devez prendre en charge les collisions de hachage possibles (deux chaînes différentes). générer le même hachage). C'est assez improbable étant donné que votre hash a assez de longueur (md5 a 32 caractères, sha1 est 40 long ...).

Si vous avez besoin d'un cryptage bidirectionnel (obtention d'une chaîne à partir du nom d'utilisateur, puis génération de ce nom d'utilisateur à partir de la chaîne), vous devrez examiner les techniques de cryptage.

Jetez un oeil à la bibliothèque mcrypt qui fournit de nombreux algorithmes de cryptage/hachage différents. Je suis sûr que vous en trouverez un qui convient à vos besoins.

+0

grâce à la fonction Hash fonctionne parfaitement. –

0

Dépend de comment et de quelle est la clé utilisée pour.

Une option si vous avez une clé fixe de toute façon, puis dériver en quelque sorte à partir du customer_no. comme utiliser md5(), mais si vos numéros de client sont séquentiels, c'est aussi facile à attaquer, donc un calcul un peu plus complexe serait mieux, en utilisant toutes les données client non modifiables. cette somme md5() peut ensuite être vérifiée par rapport à la table client.

+0

'key' est utilisé comme mot de passe pour l'enregistrement. –

+0

Quelque chose que vous envoyez dans un e-mail pour valider l'inscription? –

+0

ouais exactement comme ça –

Questions connexes