如何从表单生成随机哈希密码并使用ajax将其发送到控制器?

时间:2014-09-08 03:50:16

标签: php codeigniter bcrypt

我的登录表格是这样的:

<form action="#" method="post">
<input type="text" name="username" id="username">
<input type="password" name="password" id="password">
<button type="submit" name="submit" value="submit">Log In</button>
</form>

<script>
$(document).ready(function() {
$('#signin-form').submit(function() {
var email = $('#username').val(),
password = $('#password').val();
$.ajax({
url: '<?php echo site_url('account'); ?>',
type: 'post',
data: {username: username, password: password}
})
});
});
</script>

我想要的是我想使用bcrypt以散列形式发送密码而不是纯文本。所以怎么做呢?

1 个答案:

答案 0 :(得分:0)

据我所知,你想发送哈希密码并检索它?

此代码仅适用于php 5.5或更高版本

 echo password_hash(variable, PASSWORD_DEFAULT);

第一个参数是需要散列的密码字符串,第二个参数指定应该用于生成散列的算法。

默认算法目前是bcrypt,但是更强的算法可能会在以后的某个时间点添加为默认值,并且可能会生成更大的字符串。如果在项目中使用PASSWORD_DEFAULT,请确保将哈希存储在容量超过60个字符的列中。将列大小设置为255可能是一个不错的选择。您也可以使用PASSWORD_BCRYPT作为第二个参数。在这种情况下,结果将始终为60个字符。

在您的情况下,要使用password_hash,请创建一个将密码值传递给并使用上述代码的ajax代码,然后再使用。要验证您的密码,请使用此代码

<?php
if (password_verify($password, $hash)) {
// Success!
// the first parameter is your password that's not yet encrypted, the secode is your password encrypted
}
else {
// Invalid password
}

这是ajax代码

<script>
   function createHash()
   {
      var xmlhttp;
      if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
           xmlhttp=new XMLHttpRequest();
      }
      else
      {// code for IE6, IE5
           xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
      xmlhttp.onreadystatechange=function()
      {
           if (xmlhttp.readyState==4 && xmlhttp.status==200)
           {
               document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
            }

       }
     xmlhttp.open("GET","file.php?pass="+password,true);
     xmlhttp.send();
   }
 </script>

并在file.php

$GLOBAL['hash']=password_hash($pass, PASSWORD_DEFAULT);
$pass = $_GET['pass'];
echo $GLOBALS['hash'];

不要忘记创建一个div容器并将其命名为myDiv,哈希密码将显示在那里并获取值以执行下面的代码

var new_pass= document.getElementById("myDiv").innerHTML;

也不要忘记拨打function createHash()

我差点忘了。这是验证密码的代码

<?php
    if (password_verify($oldpass, $GLOBAL['hash'])) {
     // Success!
     // the first parameter is your password that's not yet encrypted, the secode is your password encrypted
    }
    else {
     // Invalid password
    }

希望这会有所帮助。