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
mysql函数示例:
1 | INSERT INTO table VALUES (PASSWORD('abcd')); |
如果php大于等于5.5.0,则:
1 | $password = password_hash('the 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 |
。
但是,使用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 |
号
让你的SQL
1 | UPDATE table SET password='$password'; |
未测试的代码…
来自实际手册。
http://php.net/manual/en/function.md5.php