我正在使用sha256来加密密码。我可以在shaql中保存sha256加密密码。但我无法使用相同的条款登录。
插入代码:
<?php
error_reporting(E_ALL ^ E_NOTICE);
$username = $_POST['uusername'];
$passcode = $_POST['ppasscode'];
$userflag = $_POST['uuserflag'];
//$passcodeen = hash('sha256',$passcode);
$passcodeen = hash('sha256', (get_magic_quotes_gpc() ? stripslashes($ppasscode) : $ppasscode));
$conn = mysql_connect("localhost","charles","charles") or die("connection failed with DB:".mysql_error());
mysql_select_db("sessiondb");
$query = "INSERT INTO users(username,passcode,userflag) values('$username','$passcodeen','$userflag')";
选择代码:
<?php
error_reporting(E_ALL ^ E_NOTICE);
@mysql_connect("localhost","charles","charles") or die("Connection failed".mysql_error());
@mysql_select_db("sessiondb") or die("Database doesn't exist".mysql_error());
//get user input
$username = $_POST['username'];
$ppasscode = $_POST['ppasscode'];
//$passcodeen = hash('sha256', $ppasscode);
$passcodeen = hash('sha256', (get_magic_quotes_gpc() ? stripslashes($ppasscode) : $ppasscode));
//get session value from mysql
$query = @mysql_query("select username, userflag from users where username ='$username' and passcode = '$passcodeen'") or die("Query execution failed".mysql_error());
有什么问题吗?我很困惑。谢谢。
答案 0 :(得分:56)
这可能是拼写错误吗? (ppasscode中的两个P,打算用吗?)
$_POST['ppasscode'];
我会确定并做到:
print_r($_POST);
并确保数据在那里准确,然后回显它应该是什么样的:
echo hash('sha256', $_POST['ppasscode']);
将此输出与数据库中的输出(手动)进行比较。通过这样做,您正在探索可能的失败点:
答案 1 :(得分:11)
首先,sha256是一种散列算法,而不是一种加密方式。加密需要有办法将信息解密回其原始值(冲突除外)。
查看您的代码,如果您提供正确的参数,它似乎应该有效。
首先尝试在代码中使用文字字符串,并验证其有效性,而不是使用$_POST[]
变量
尝试将数据库查询中的比较移动到代码中(获取给定用户的哈希值并与刚刚计算的哈希值进行比较)
但最重要的是,在以任何公共方式部署之前,请记住清理您的输入。不允许将任意SQL插入查询中。这里最好的想法是使用参数化查询。
答案 2 :(得分:1)
您应该使用http://en.wikipedia.org/wiki/Bcrypt之类的自适应哈希来保护密码
答案 3 :(得分:1)
第一件事是制作一个comparison of functions of SHA并选择支持您的编程语言(PHP)的最安全的算法。
然后,您可以查看官方文档以实现hash()
函数,该函数接收您选择的哈希算法和原始密码作为参数。
sha256 => 64 bits
sha384 => 96 bits
sha512 => 128 bits
哈希算法越安全,从哈希算法和从服务器端恢复原始值的时间来看,成本就越高。
$hashedPassword = hash('sha256', $password);
答案 4 :(得分:0)