【问题标题】:Encrypting a password column in a SQL database加密 SQL 数据库中的密码列
【发布时间】:2013-08-14 13:22:15
【问题描述】:

我的数据库名称密码中有一个列,我只想在发布到数据库之前对密码进行散列或加密。我的 php 提交文件中有这样的代码。

<?php
session_start();
include('config.php');

$ID=$_POST['ID'];
$name=$_POST['name'];
$password=$_POST['password'];
$department=$_POST['department'];
$email=$_POST['email'];

$ID_arr=array();
$name_arr=array();
$password_arr=array();
$dept_arr=array();
$email_arr=array();

$i = -1;

++$i;
$ID_arr[$i]= $_POST['ID'];
$name_arr[$i]= $_POST['name'];
$password_arr[$i]= $_POST['password'];
$dept_arr[$i]= $_POST['department'];
$email_arr[$i]= $_POST['email'];

$j=0;
while ( $j <= $i)
{   
$ID = $ID_arr[$i];
$name = $name_arr[$i];
$password = $password_arr[$i];
$department = $dept_arr[$i];
$email = $email_arr[$i];

$sql = "INSERT INTO `employee`. `admin` (ID ,name ,password ,department
 ,email)         VALUES     (

  '$ID' ,'$name' ,'$password' ,'$department' ,'$email'
  )";

$result = mysql_query($sql);
if(!$result){
   die('invalid query:'.mysql_error());
 }
 else
echo ("<tr><td>" . "You have been succesfully registered..." . "</td></tr>");
header('Refresh:5; url=adminlogin.php');
die;
}
?>

我可以知道应该把加密功能放在哪里吗?或者有什么方法可以加密密码?

【问题讨论】:

标签: php sql


【解决方案1】:

您可以使用 MySQL PASSWORD 函数和 PHP crypt 函数。

MySQL函数示例:

INSERT INTO table VALUES (PASSWORD('abcd'));

【讨论】:

    【解决方案2】:

    如果您的 PHP >= 5.5.0 则:

    $password = password_hash('the password');
    

    如果您有旧版本的 PHP,请使用 compatibility library。包含lib/password.php 文件,然后照常使用the documentation。

    【讨论】:

      【解决方案3】:

      首先,忘记 md5。如果您使用 PHP >= 5.1.2,则可以使用 hash() 函数。

      从您所考虑的代码中:

      ...
      $j=0;
      while ( $j <= $i)
      {   
      $ID = $ID_arr[$i];
      $name = $name_arr[$i];
      $password = $password_arr[$i];
      $department = $dept_arr[$i];
      $email = $email_arr[$i];
      ...
      

      您只需对 $password 进行以下操作:

      $password = hash('sha256', $password_arr[$i]);
      

      但是,使用 sha256,您必须确保数据库表中的密码字段长度为 64 或更多,即 varchar(64) 或 char(64)。参考以下问题的答案:

      另外,在您的 config.php 中,您可以定义一个 slat,例如 $salt,它将是一个固定字符串,要添加到每个密码中:

      //in your config.php
      ...
      $salt = 'jhfdkjdhfTyhdh3365@jdh69kkshhQAAAiyeg'// some ungussed string
      ...
      // in your hash code:
      
       $password = hash('sha256', $salt.$password_arr[$i]);
      

      【讨论】:

      • 非常感谢您的回答,我总是能在这个网站上解决我的问题,以及你们在这里的友好人士,很高兴认识你们:)
      • 您好,我在登录时遇到问题,因为输入的密码与数据库中的哈希密码不匹配,我可以重新输入密码,因为它已经是 salt
      • 与您在保存到数据库之前对其进行哈希处理的方式相同。在数据库的选择查询中插入散列值。
      【解决方案4】:

      如果您的密码是变量,请尝试使用类似的内容

      $input=mysqli_real_escape_string($con, $_POST['password']);
      $password = md5($input);
      

      让你的 SQL 类似于

      UPDATE table SET password='$password';
      

      未经测试的代码...

      来自实际手册。

      http://php.net/manual/en/function.md5.php

      【讨论】:

      • 您应该永远使用 MD5 算法来散列密码。多年来一直不安全。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      • 2017-06-12
      相关资源
      最近更新 更多