关于php:加密SQL数据库中的密码列

Encrypting a password column in a SQL database

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?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;
}
?>

我可以知道加密函数应该放在哪里吗?或者用什么方法加密密码?


您可以使用mysql PASSWORD函数和php crypt函数。

mysql函数示例:

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

如果php大于等于5.5.0,则:

1
$password = password_hash('the password');

如果您有旧版本的PHP,那么使用兼容性库。包括lib/password.php文件,然后像往常一样使用文档。


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

根据您所关注的代码:

1
2
3
4
5
6
7
8
9
10
...
$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进行以下操作:

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

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

  • 使用sha256哈希时,哈希有多长?(例如,我的mysql varchar应该多长时间?)

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

1
2
3
4
5
6
7
//in your config.php
...
$salt='jhfdkjdhfTyhdh3365@jdh69kkshhQAAAiyeg'// some ungussed string
...
// in your hash code:

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


如果您的密码是一个变量,请尝试使用类似的方法

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

让你的SQL

1
UPDATE table SET password='$password';

未测试的代码…

来自实际手册。

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