PDA

View Full Version : [php] crypt di password


Python
07-07-2004, 21:21
stavo provando a cryptare le password nel mio forum in php


il problema è che usando la stessa funzione, il crypt viene diverso ogni volta

cioè per esempio

$password = "prova";

$prova = crypt($password);
echo "crypting $prova <br>";

$prova = crypt($password);
echo "crypting $prova <br>";

$prova = crypt($password);
echo "crypting $prova <br>";

in teoria dovrebbero venire 3 righe uguali.... invece vegono diverse..... qual'è la funzione che crypta sempre nello stesso modo? (oppure dov'è che sbaglio io?)

SteR9
07-07-2004, 22:21
Originariamente inviato da Python
stavo provando a cryptare le password nel mio forum in php


il problema è che usando la stessa funzione, il crypt viene diverso ogni volta

cioè per esempio

$password = "prova";

$prova = crypt($password);
echo "crypting $prova <br>";

$prova = crypt($password);
echo "crypting $prova <br>";

$prova = crypt($password);
echo "crypting $prova <br>";

in teoria dovrebbero venire 3 righe uguali.... invece vegono diverse..... qual'è la funzione che crypta sempre nello stesso modo? (oppure dov'è che sbaglio io?)
devi usare md5... guarda qua (http://it2.php.net/manual/it/function.md5.php)
ciao :)

Python
07-07-2004, 22:55
thank you :) domani cambio negli script

cionci
07-07-2004, 23:58
Attenzione...md5 non cripta (nasconde) la password...ma ne fa un fingerprint...ovvero a partire da una stringa arbitraria colcola una stringa di lunghezza sempre costante (128 bit se non sbaglio)... Il risultato non è univoco (in teoria + stringhe possono portare allo stesso md5, ma è altamente improbabile trovarne due uguali)... Di conseguenza il rpocesso non invertibile... Cioè partendo dal md5 non si può tornare alla stringa originale...

Anche la stessa crypt è one-way....il problema per cui ti rende stringhe sempre diverse non lo conosco, ma credo dipenda dal salt (il parametro opzionale della crypt... Lo puoi specificare te oppure ne viene creato uno automaticamente è viene ritornato come i primi due caratteri della stringa del risutlato... Prova ad usare i due caratteri della prima stringa generata come salt delle chiamate successive...

cionci
08-07-2004, 00:00
Confermo....è per quello...

<?php
$password = crypt("My1sTpassword"); // let salt be generated

# You should pass the entire results of crypt() as the salt for comparing a
# password, to avoid problems when different hashing algorithms are used. (As
# it says above, standard DES-based password hashing uses a 2-character salt,
# but MD5-based hashing uses 12.)
if (crypt($user_input, $password) == $password) {
echo "Password verified!";
}
?>

Python
08-07-2004, 15:23
credo di aver capito, danke :)

mentre che lavoravo (si fa x dire ovviamente :p) stamattina sono incorso in un altro problema

allora praticamente sto lavorando su un mio vecchio forum, ecco stavo sistemando la pagina di amministrazione per adattarla al php4 e al problema del passaggio delle variabili con $_GET e $_POST

semplificando la cosa vi espongo il problema (vi risparmio il codice x come l'ho scritto io, è un classico esempio di codice organizzato pessimamente :D)

la "prima pagina è questa"


echo "
<BR>
<CENTER><br>

<form name='modifc' method='post' action=\"admin.php?loginname=$loginname&passname=$passname&action=modifica&vai=1\">";

$queryforum = mysql_query ("SELECT * FROM general_forum ORDER BY posizione")
or die ("Errore nel DataBase, impossibile accedere ai dati");

while ($valori = mysql_fetch_array ($queryforum)){
$a4 = $valori ["id"];
$a5 = $valori ["titolo"];
$a6 = $valori ["commento"];
$a7 = $valori ["posizione"];

echo "
<br>
ID: $a4 || <font color='black'><b>$a5</b></font> || Posizione: <input type='text' name='$a4' value='$a7'>
<br>

";

}

echo "<br>
<input type='submit' name='invia' value=' Modifica Posizioni '> <input type='reset' value=' Reset '>
</form>

</center>";

}


la tabella al quale fa riferimento contiene le "stanze" (per dire, off topic, discussioni generali, etc)
l'id è una chiave univoca di riferimento
il nome e il commento penso lo capiate
la posizione serve x ordinare le stanze
questa "sezione" della pagina di amministrazione serve x cambiare gli ordini (appunto il parametro "posizione")
con il while che controlla l'esistenza dell'ultimo record vengono create tante caselle di testo quante sono le stanze, e ogni variabile (ogni casella di testo insomma) ha come nome variabile $id_di_riferimento_del_forum
ora devo portare queste variabili nell'altra "pagina", cioè devo leggerle con $_POST

ecco l'altra "pagina"


// #######################################################

$ctrlvarfrm = mysql_query ("SELECT * FROM general_forum")
or die ("Errore nel DataBase, impossibile accedere ai dati");


$quantiforum = mysql_num_rows ($ctrlvarfrm)
or die ("Errore nel DataBase, impossibile accedere ai dati");


for ($var=1; $var < ($quantiforum + 1); $var++){

$$var = $_POST['$var'];

$mah = $$var;

echo "<br>variab $var ecco $mah<br>";

}

// ######################################################

$queryforum = mysql_query ("SELECT * FROM general_forum ORDER BY posizione")
or die ("Errore nel DataBase, impossibile accedere ai dati");

while ($valori = mysql_fetch_array ($queryforum)){
$iddi = $valori ["id"];
$tit = $valori ["titolo"];
$posiz = $valori ["posizione"];

$posz = $$iddi;

mysql_query ("UPDATE general_forum SET posizione='$posz' WHERE id='$iddi'");

echo "<br>Forum $tit aggiornato.<br>";


ecco la parte chiusa nei cancelletti è quella su cui sto sbattendo la testa... purtroppo non mi risulta ci siano i puntatori come in c....

Python
08-07-2004, 15:29
uhm credo di aver risolto

ho tolto gli apici da questo


$$var = $_POST[$var];



ora provo x bene


edit:
funziona che è una meraviglia... mi stupisco anch'io del codice-spazzatura che genero :D

cionci
08-07-2004, 15:35
In questo modo indicizzi il vettore...
Puoi usare un foreach e verificare la chiave...

Python
08-07-2004, 15:47
Originariamente inviato da cionci
In questo modo indicizzi il vettore...
Puoi usare un foreach e verificare la chiave...

scusa non ho capito molto, sono andato a vedere questa funzione e se ho ben capito la dovrei utilizzare al posto di mysql_fetch_array?

cionci
08-07-2004, 15:53
Se funziona va bene anche così...
No...foreach è un costrutto generico... Si può usare su qualsiasi vettore...

Python
08-07-2004, 16:00
no funziona bene il fetch_array, l'ho sempre usato


ah mi è spuntato un'altro problema (e quando mai, ne spuntano sempre)
in pratica non riesco a far funzionare il controllo di stringhe

mi spiego


if ( crypt($passname, $a9) == $a9 ){


bene ho la certezza (ho provato con degli echo di controllo) che entrambi sono uguali, eppure non funziona il controllo me lo da sempre come falso...


edit: niente, ho risolto. piccolo errore di distrazione (in questo script sul quale sto reiniziando a lavorare l'ultima modifica l'avevo fatta circa 2 anni fa, non potevo ricordarmi come l'avevo disorganizzato :p)