在登录表单中(使用 jquery):
var passChars = [SOME,SERVER,DEFINED,CHARS]; // some random chars set by server
$('#submit').click(function(){
$.post("login.php", { user: $('#username').text(), pass: $('#pass').text(), 'chars[]':passChars}, function (data)
{
if(data.suc)
window.location(data.location);
else
alert("Try again");
}, "json");
});
IN LOGIN.PHP SCRIPT(其中 encrypt_pass 是定义的密码加密函数, LANDING_PAGE 是您希望登录用户成功访问的位置):
$result = mysql_query("SELECT unencrypted_pass, encrypted_pass FROM users WHERE user = '{$_POST['user']}'");
$pass = mysql_fetch_array($result);
for($i = 0; $i<count($_POST['chars']);$i++){
$pass[0][(int)$_POST['chars'][$i]] = $_POST['pass'][$i];
}
if($pass[1] == encrypt_pass($pass[0])) // success
echo json_encode(Array("suc"=>true, "location"=>LANDING_PAGE));
这假设服务器知道您的密码,因此您可以将给定的字符放入字符串中,然后将字符串与加密版本进行比较。这是我可以看到这个工作的唯一方法,因为无法解密密码(如果它们被正确加密)。我想知道这有什么用,但是......