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

Php 如何从表单中生成随机哈希密码,并使用ajax将其发送给控制器?,php,codeigniter,bcrypt,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 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>

登录
$(文档).ready(函数(){
$(“#登录表单”).submit(函数(){
var email=$('#username').val(),
password=$('#password').val();
$.ajax({
url:“”,
键入:“post”,
数据:{用户名:用户名,密码:密码}
})
});
});

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

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

此代码仅适用于PHP5.5或更高版本

 echo password_hash(variable, PASSWORD_DEFAULT);
第一个参数是需要散列的密码字符串,第二个参数指定生成散列的算法

默认算法当前为bcrypt,但稍后可能会添加一个更强的算法作为默认算法,并可能生成更大的字符串。如果在项目中使用
PASSWORD\u DEFAULT
,请确保将哈希存储在容量超过60个字符的列中。将列大小设置为
255
可能是一个不错的选择。您还可以使用
PASSWORD\u 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
}
别忘了创建一个div容器并将其命名为myDiv,散列密码将显示在那里,要获得该值,请执行下面的代码

var new_pass= document.getElementById("myDiv").innerHTML;
另外,不要忘记调用
函数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
    }

,这里说的是将
原始字符串密码
散列字符串密码
传递给VerifyThank buddy以获得帮助,但我不想从表单发送普通密码。我只想在使用ajax时从表单发送散列密码,如果我以普通形式发送密码,那么我的密码很容易被破解。您建议的代码仅在发送普通密码时有效,但如果发送哈希密码,则返回false。有没有解决这个问题的方法,或者发送普通密码是唯一的选择?你的问题与你想要的不同,请多输入一些代码和细节。实际上我没有使用默认密码,我使用的是。我试图在ajax中发送这样的代码:
var hash=$.ajax({url:'',键入:'post',数据:{email:email,pass:hash}})
,但它不起作用。你能告诉我如何通过ajax将散列密码发送到控制器的正确方法吗?我完成了我的答案的编辑,剩下的由你决定。希望这对你有帮助。非常感谢。这是非常有帮助的。如果这是有用的,我有一个问题在bcrypt。要验证密码,我需要一个没有散列的密码。但根据我的代码,散列密码是通过ajax发送到控制器的,而不是未散列的密码,因为如果我发送未散列的密码,那么它可以在firebug中看到。我的db密码也是bcrypt格式的。那么,我如何验证密码,因为第一个参数必须是尚未散列的密码?
var new_pass= document.getElementById("myDiv").innerHTML;
<?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
    }