我正在为我正在制作的网站整理一个用户注册/登录系统,而在本教程中我遵循的盐应该是32个字符长。 当我运行脚本并将盐作为测试回显到页面上时,这会起作用,但是当我删除echo命令时,代码要么用空白盐更新mySQL DB,要么最多只更新1-2个字符。
我是PHP的新手(以及一般的编码)所以我在这里缺乏知识意味着我可能遗漏了一些明显的东西。我一遍又一遍地按照教程,仍然产生相同的结果。
有谁知道为什么会这样?
以下是代码:
Hash.php
<?php
class Hash {
public static function make($string, $salt) {
return hash('sha256', $string . $salt);
}
public static function salt($length) {
return mcrypt_create_iv($length);
}
public static function unique() {
return self::make(uniqid());
}
}
?>
register.php:
<?php
require_once 'core/init.php';
if(Input::exists()) {
if(Token::check(Input::get('token'))) {
$validate = new Validate();
$validation = $validate->check($_POST, array(
'username' => array(
'required' => true,
'min' => 2,
'max' => 20,
'unique' => 'users'
),
'password' => array(
'required' => true,
'min' => 6
),
'password_again' => array(
'required' => true,
'matches' => 'password'
),
'name' => array(
'required' => true,
'min' => 2,
'max' => 50
)
));
if($validation->passed()) {
$user = new User();
$salt = Hash::salt(32);
try {
$user->create(array(
'username' => Input::get('username'),
'password' => Hash::make(Input::get('password'), $salt),
'salt' => $salt,
'name' => Input::get('name'),
'joined' => date('Y-m-d H:i:s'),
'group' => 1
));
Session::flash('home', 'You have been registered and can now log in.');
header('Location: index.php');
} catch(Exception $e) {
die($e->getMessage());
}
} else {
foreach($validation->errors() as $error) {
echo $error, '<br>';
}
}
}
}
?>