我的登录表格是这样的:
<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以散列形式发送密码而不是纯文本。所以怎么做呢?
答案 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
}
希望这会有所帮助。