[php] Algoritmo di decriptazione (des)

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
Etabeta3030
00mercoledì 16 marzo 2005 18:30
ho trovato un file per generare un codice criptato con il sistema TwoWays, ma non riesco a completare il "ritorno".

Cioè, se io ho già il codice criptato, e non ho il $message, cosa dovrei chiedere come variabili?
$miocodice=$ciphertext e $message=" "; ????

continua a darmi errore, in tutte le salse [SM=x53917] [SM=x53917] [SM=x53917]

il codice è qui e la descrizione dell'autore è qui.

Alberto, o qualche bravo matematico-php.... aiutooooo...

aessenet
00mercoledì 16 marzo 2005 19:22
Ora provo ad eseguire il file sul mio pc e ti dico.. in ogni caso dagli esempi sembra che la funzione da chiamare sia una sola, che riceve un parametro (1 o 0) a seconda se deve criptare o decriptare


Modificato da aessenet 16/03/2005 19.35
aessenet
00mercoledì 16 marzo 2005 19:33
Sisi direi che funziona [SM=x53911]

Prova a partire dal codice dell'esempio:

define("CRIPTA", 1);
define("DECRIPTA", 0);
$chiave = "this is a 24 byte key !!";
$messaggio = "Messaggio di prova";
$messaggio_criptato = des ($chiave, $messaggio, CRIPTA, 0, null);
echo "Messaggio originale: ".$messaggio."\n";
echo "Messaggio criptato: " . stringToHex ($messaggio_criptato)."\n";
$messaggio_decriptato = des ($chiave, $messaggio_criptato, DECRIPTA, 0, null);
echo "Messaggio decriptato: " . $messaggio_decriptato;

Etabeta3030
00giovedì 17 marzo 2005 01:55
grazie infinite, ma non riesco a capire questo:

se io parto da un codice precedentemente criptato da questo stesso sistema, che chiamerò $fcodice e corrisponde a
0x96ede47b661a1a605eb085dbd93e2441

prendo il tuo script e lascio solo la parte Decripta, così:

define("CRIPTA", 1);
define("DECRIPTA", 0);
$chiave = "this is a 24 byte key !!";
//$messaggio = "Messaggio di prova";
//$messaggio_criptato = des ($chiave, $messaggio, CRIPTA, 0, null);
//echo "Messaggio originale: ".$messaggio."\n";
//echo "Messaggio criptato: " . stringToHex ($messaggio_criptato)."\n";
$messaggio_criptato = $fcodice;
$messaggio_decriptato = des ($chiave, $messaggio_criptato, DECRIPTA, 0, null);
echo "Messaggio decriptato: " . $messaggio_decriptato;
?>

invece che ottenere la decriptazione del mio $fcodice ottengo solo la ri-criptazione del medesimo...!
come faccio a fargli solamente decriptare il mio $fcodice?



aessenet
00giovedì 17 marzo 2005 08:19
Sei sicuro che non funzioni?

Forse tu non gli passi il vero messaggio criptato, ma la conversione in esadecimale del messaggio (stringToHex(..) ).

Il messaggio criptato senza conversione in esadecimale contiene quasi sempre caratteri strani non appartenenti al set ascii stretto (ad esempio a me viene: nYáde$'÷0Dø§4·Ó›=#ÆV³ )..insomma credo che piu' che caratteri siano una sequenza di bit.
Per dargli un'apparenza piu' umana l'autore li ha convertiti in esadecimale, così almeno il messaggio criptato si può pronunciare [SM=x53911]

Etabeta3030
00giovedì 17 marzo 2005 13:38
[SM=x53925] ahhh.... capito!!!! [SM=x53913]
certo che cacchio... è durissima!!!!
adesso dovrò scoprire come invertire stringToHex, anche perchè ho provato a mandare il codice con una mail che passa il dato, e non riesce a passarglielo tutto, probabilmente fa fatica a ricostruire il caratteri criptati... mi decripta solo metà dell'indirizzo...
comunque sono a buon punto, stasera tornerò ad occuparmene e ti farò sapere se ce l'ho fatta [SM=x53912]


intanto mi inchino perchè sei veramente un fenomeno, anche di gentilezza.



Modificato da Etabeta3030 17/03/2005 13.40
aessenet
00giovedì 17 marzo 2005 17:31
Mah..provando ad inviargli la frase criptata con un form (metodo post), la decripta senza problemi, quindi per funzionare funziona!

Tieni presente che nelle e-mail puoi usare solo i caratteri del set ascii standard..insomma 7 bit, quindi niente lettere accentate nè caratteri strani (come quelli della frase criptata).

Per rappresentare un carattere del set ascii esteso si usano piu' caratteri del set ascii standard.. per indenderci è un po' come in html: per fare la & bisogna scrivere
&amp

Per fare il maggiore bisogna scrivere
>


Ma.. ti serve per forza il des? Devi inviare informazioni così riservate da richiedere la criptazione?

Modificato da aessenet 17/03/2005 17.33
Etabeta3030
00venerdì 18 marzo 2005 01:43
[SM=x53917] non ce l'ho fatta.
ho fatto almeno 50 tentativi ma non mi funzia.
se invio il dato per mail non lo legge correttamente, anche usando il POST, e se volessi passargli il $messaggio_criptato invece che il $ciphertext non so come fare a riportare il dato da esadecimale a stringa.

stavo tentando di procedere così perchè mi avevi detto che questo era il metodo corretto qui, ti ricordi? e poi perchè non pensavo che fosse così difficile... mi funziona la pagina se la metto dentro così com'è, ma come ti dicevo non riesco a decriptare il dato che proviene dalla mail.
Se ti va di passarmi lo script di invio-decriptazione che hai testato tu, forse capisco dove sbaglio...

Posso risolvere anche mandando il codice al db e chiedendo un confronto al dato quando mi torna dalla mail dell'utente... però sono triste perchè queste sfide mi pigliano...
Grazie ancora intanto.
aessenet
00venerdì 18 marzo 2005 08:09
Ora non ho il mio portatile con lo script (sta notte lo spedisco), ma missà che stai facendo una fatica incredibile per nulla!

Se vuoi verificare una autenticazione, non ti serve per forza un algoritmo come il des (criptazione/decriptazione)..di solito per queste cose di usa l'md5() o qualche sua variante..insomma algoritmi che criptano e basta, senza che esiste alcuna possibilità di decriptare.

So che sembra strano non poter decriptare, ma la cosa non deve spaventarti: siccome l'md5() di due stringhe uguali è uguale, per vedere se due stringhe sono uguali si può confrontare tranquillamente il loro md5().

Facciamo finta che il codice di attivazione è l'md5 della mail dell'utente: md5($mail);

L'utente per attivare l'account deve inserire in una pagina web il suo username/password e il codice di attivazione ricevuto via mail.

Quando l'utente invia il form, l'applicazione controlla prima di tutto che user e password siano corrette, e se lo sono preleva dal database l'e-mail dell'utente. Applica l'md5 alla mail prelevata dal database, e lo confronta con il codice inserito dall'utente.

Se il confronto ha esito positivo, vuol dire che il codice di attivazione è proprio quello dell'utente, e l'account può essere attivato.

Di solito io usa l'md5 anche per memorizzare le password degli utenti..in pratica non memorizzo le password, ma le password criptate (così anche se lavoro con il database, non vengo a conoscenza delle password)
Etabeta3030
00venerdì 18 marzo 2005 14:20
ok, non perdiamoci d'animo [SM=x53912]

comprendo cosa intendi, perciò:

//1) mail in partenza:
$fcognome = $row[cognome];
$codice = md5($femail);


//2) invio
$manda = "http://prova/arrivo.php?cognome=$fcognome&codice=$codice";

//3) arrivo
$conferma=$HTTP_GET_VARS[cognome];
$codice_inviato=$HTTP_GET_VARS[codice];

//4) elaborazione del dato:
//(...sfoglia il db correttamente)

if(md5($email) === $codice_inviato)
{
print "<br>consenso ricevuto";
}
else {
print "utente non corrispondente";
}

---------------------

e allora perchè mi dice Utente non corrispondente??? [SM=x53917] [SM=x53917] [SM=x53917]

Modificato da Etabeta3030 18/03/2005 14.23
aessenet
00venerdì 18 marzo 2005 18:23
Dai ormai ci sei!

Solo una cosa: quel "===" non credo sia necessario: fallo diventare un normale "==" (non ti servono confronti sul tipo di dato).

Se continua a non funzionare, aggiungi qualche echo in modo da stampare i valori delle variabili prima dell'if(md5...){}
Etabeta3030
00sabato 19 marzo 2005 14:32
[SM=x53914] [SM=x53914] [SM=x53914] [SM=x53913] :[SM=x53911] [SM=x53911] asd: [SM=x53915] [SM=x53914] [SM=x53914] [SM=x53933] [SM=x53914] [SM=x53914] [SM=x53914] [SM=x53914]

grazie Alberto.
per la pazienza soprattutto.
grazie.
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 00:07.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com