Ho provato e ho fatto così. Dal lato client, esattamente prima di inviare la password faccio la crittografia poi la invio. Dal lato server faccio il confronto.
In teoria, se la password è abbastanza complessa, la password intercettata via rete è indecifrabile.
Però proprio adesso mi è venuto in mente che qualcuno potrebbe lo stesso riprodurre pari pari il messaggio HTTP (in qualche modo, non so) inviando la password così crittografata e fare il login senza sapere esattamente qual è. Per cui in fin dei conti l'unico modo veramente sicuro di fare login è SSL. Voi cosa ne dite?
codice:
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="style.css" />
<script src="md5-min.js" type="text/javascript"></script>
<script type="text/javascript">
function encrypt(){
document.getElementById('password').value=hex_md5(document.getElementById('username').value+' $%& '+document.getElementById('password').value);
document.getElementById('username').value='';
}
</script>
</head>
<body>
<div id="login_frame">
<form action="main.php" method="post" onSubmit="encrypt()">
<label for="username">Username:</label>
<input type="text" id="username" name="username" />
<label for="password">Password:</label>
<input type="password" id="password" name="password" />
<input type="submit" value="Invia" />
<input type="reset" value="Cancella" />
<p class="error"><?php print @$_SESSION['error'];?></p>
</form>
</div>
</body>