php: decrypt password digest

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
Zen
00giovedì 3 agosto 2006 17:50
Ho creato un file di password con htdigest. Le password sono cryptate. Poi ho creato un sito con autenticazione a cui passo le password lette dal file. Per fare un confronto con il response http ho bisogno della password in chiaro. Come faccio a decryptarla?

Ho trovato questa funzione su:

http://it2.php.net/manual/it/function.md5.php

function md5_decrypt($enc_text, $password, $iv_len = 16)
{
$enc_text = base64_decode($enc_text);
$n = strlen($enc_text);
$i = $iv_len;
$plain_text = '';
$iv = substr($password ^ substr($enc_text, 0, $iv_len), 0, 512);
while ($i < $n) {
$block = substr($enc_text, $i, 16);
$plain_text .= $block ^ pack('H*', md5($iv));
$iv = substr($block . $iv, 0, 512) ^ $password;
$i += 16;
}
return preg_replace('/\\x13\\x00*$/', '', $plain_text);
}


Ma non mi funziona. Devo fare un po' di debugging. Voi avete già affrontato il problema dell'autenticazione degli utenti? Come?
Con i cookies o con http digest?

[Modificato da Zen 03/08/2006 17.51]

Zen
00giovedì 3 agosto 2006 18:17
Re:
Forse ho chiesto una cosa impossibile.
Ma devo trovare un workaround !
Il fatto è che uso questo script per l'autenticazione. Ma in questo script le password come si può notare vengono passate in chiaro in un array. Io invece le vorrei leggere da un file con password cryptate con htdigest.


$realm = 'Restricted area';

//user => password
$users = array('admin' => 'mypass', 'guest' => 'guest');


if (!isset($_SERVER['PHP_AUTH_DIGEST'])) {
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Digest realm="'.$realm.
'" qop="auth" nonce="'.uniqid().'" opaque="'.md5($realm).'"');

die('Text to send if user hits Cancel button');
}

// analisi della variabile PHP_AUTH_DIGEST
preg_match('/username="(?P.*)",\s*realm="(?P.*)",\s*nonce="(?P.*)",\s*uri="(?P.*)",\s*response="(?P.*)",\s*opaque="(?P.*)",\s*qop=(?P.*),\s*nc=(?P.*),\s*cnonce="(?P.*)"/', $_SERVER['PHP_AUTH_DIGEST'], $digest);

if (!isset($users[$digest['username']]))
die('Username not valid!');


// generazione di una risposta valida
$A1 = md5($digest['username'] . ':' . $realm . ':' . $users[$digest['username']]);
$A2 = md5($_SERVER['REQUEST_METHOD'].':'.$digest['uri']);
$valid_response = md5($A1.':'.$digest['nonce'].':'.$digest['nc'].':'.$digest['cnonce'].':'.$digest['qop'].':'.$A2);

if ($digest['response'] != $valid_response)
die('Wrong Credentials!');

// Ok, utente/passworrd validi
echo 'Your are logged in as: ' . $digest['username'];

?>
sun12
00giovedì 3 agosto 2006 18:29
md5 non è decryptabile, la cosa migliore (e comunemente usata) è salvare la password cryptata, e fare il confronto tra questa e la password immessa anche questa cryptata.

se non sei molto pratico e non hai voglia di fare a mano, consiglio di dare un occhio alle PEAR, librerie di php ormai diventate standard (che io pero non uso [SM=x39897] )
Zen
00venerdì 4 agosto 2006 00:24
Re:

Scritto da: sun12 03/08/2006 18.29
md5 non è decryptabile, la cosa migliore (e comunemente usata) è salvare la password cryptata, e fare il confronto tra questa e la password immessa anche questa cryptata.

se non sei molto pratico e non hai voglia di fare a mano, consiglio di dare un occhio alle PEAR, librerie di php ormai diventate standard (che io pero non uso [SM=x39897] )



Grazie [SM=x39851]
Le guarderò [SM=x39854]
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 19:08.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com