如何在php5.3.0中使用sha256

Dyl*_*SUN 39 php hash sha256

我正在使用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')";
Run Code Online (Sandbox Code Playgroud)

选择代码:

<?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());
Run Code Online (Sandbox Code Playgroud)

有什么不对?我很困惑.谢谢.

Jer*_*gan 60

这可能是一个错字吗?(ppasscode中的两个P,打算?)

$_POST['ppasscode'];
Run Code Online (Sandbox Code Playgroud)

我会确定并做到:

print_r($_POST);
Run Code Online (Sandbox Code Playgroud)

并确保那里的数据准确,然后回显它应该是什么样子:

echo hash('sha256', $_POST['ppasscode']);
Run Code Online (Sandbox Code Playgroud)

将此输出与数据库中的输出(手动)进行比较.通过这样做,您正在探索可能的失败点:

  1. 从表单获取密码
  2. 哈希密码
  3. 存储密码
  4. 比较两者.


Yan*_*ton 11

首先,sha256是一种散列算法,而不是一种加密算法.加密将需要一种方法来将信息解密回其原始值(冲突除外).

查看您的代码,如果您提供正确的参数,它似乎应该可以工作.

  • 首先尝试在代码中使用文字字符串,并验证其有效性,而不是使用$_POST[]变量

  • 尝试将比较从数据库查询移动到代码(获取给定用户的哈希并与刚刚计算的哈希进行比较)

但最重要的是,在以任何公共方式部署之前,请记住清理您的输入.不允许将任意SQL插入查询中.这里最好的想法是使用参数化查询.