安装后无法登录。数据库显示哈希密码:

时间:2013-11-03 14:44:24

标签: php hash codeigniter-2

让我先说一下我写PHP不是最好的。我也没有写下面的代码,但我正在寻找一些关于我在这个更大的过程中发生的事情我缺少的指导。

在使用CodeIgniter和twitter-Bootstrap框架初始安装free ticketing software之后,数据库使用我的管理员电子邮件设置默认管理员帐户,应该是什么,默认密码为admin:

CREATE TABLE IF NOT EXISTS `tblstaffs` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `firstname` varchar(200) NOT NULL,
  `lastname` varchar(200) NOT NULL,
  `email` varchar(200) DEFAULT NULL,
  `password` varchar(200) DEFAULT NULL,
  `admin` int(10) DEFAULT '0',
  `hash` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`),
  KEY `id_2` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

--
-- Dumping data for table `tblstaffs`
--

INSERT INTO `tblstaffs` (`id`, `firstname`, `lastname`, `email`, `password`, `admin`, `hash`) VALUES
(1, 'Admin', 'Admin', 'admin@admin.com', '08gv6gemSKxv09EImCsPLO94Nje6ZVAlFnuc13kohFwvC0kh/ESFEn1lEwL9bbSbrlym/UrO6wM9p0CGnjJHzg==', 1, '');

我看到了这个值:

08gv6gemSKxv09EImCsPLO94Nje6ZVAlFnuc13kohFwvC0kh/ESFEn1lEwL9bbSbrlym/UrO6wM9p0CGnjJHzg==

也在数据库中。

尝试输入'admin'作为密码无效。我想我可能错过了一些必要的PHP扩展?

            // Form validation success.

        $data['firstname'] = $this -> input -> post('firstname');
        $data['lastname'] = $this -> input -> post('lastname');
        $data['email'] = $this -> input -> post('email');
        $data['id'] = $this -> input -> post('id');

        if($this->input->post('password'))
            $data['password'] = $this->encrypt->encode($this -> input -> post('password'));

        $result = $this -> Admin -> EditStaff($data);

        if ($result == FALSE)
        {
            $status['statusmsg'] = "A user with the email already exists";
            $status['status'] = 0;
            echo json_encode($status);
        }
        else
        {
            $status['status'] = 1;
            echo json_encode($status);

2 个答案:

答案 0 :(得分:0)

您肯定遇到加密问题,请更改此行

if($this->input->post('password'))
            $data['password'] = $this->encrypt->encode($this -> input -> post('password'));

这样的事情(看看加密后'密码'变成了什么)

if($this->input->post('password')){
    $data['password'] = $this->encrypt->encode($this -> input -> post('password'));
    echo "Password: $this->input->post('password')";
    echo "Encrypted password: $data['password']";
}

如果它回应的不同于:

08gv6gemSKxv09EImCsPLO94Nje6ZVAlFnuc13kohFwvC0kh/ESFEn1lEwL9bbSbrlym/UrO6wM9p0CGnjJHzg==

这意味着你的代码点火器confs中可能有一个错误的加密密钥,或者是实际的字符串:

08gv6gemSKxv09EImCsPLO94Nje6ZVAlFnuc13kohFwvC0kh/ESFEn1lEwL9bbSbrlym/UrO6wM9p0CGnjJHzg==

不是密码“admin”的正确加密密钥!

答案 1 :(得分:0)

票务系统使用CodeIgniter的加密库来加密其密码(注意:这是一件坏事;它是可逆加密,而不是哈希。)

CodeIgniter的加密库如果可用则使用mcrypt,否则会回退到自己不太安全的方法。

数据库脚本中提供的密码肯定是使用mcrypt加密的。我猜你的PHP安装中没有设置mcrypt模块。

有几种可能的选择:

  1. 首先将mcrypt扩展名添加到服务器上的PHP安装,然后使用您在tblstaffs中指定的电子邮件地址和密码“admin”(正确的密码;我已经复制了您的问题并进行了检查。)
  2. 请勿安装mcrypt,并使用售票系统中的密码恢复程序将新密码通过电子邮件发送到您指定的电子邮件地址。这将使用当前正在使用的加密方法替换现有密码。显然,您需要确保tblstaffs中的电子邮件地址是有效的,并且该外发邮件正在处理您的PHP安装。
  3. 将tblstaffs中admin用户的加密密码手动更新为与您的非mcrypt加密兼容的密码。我相信“AmJUYVxsAzgBNQ ==”是一个可能适用于密码“admin”的值。
  4. 但就个人而言,我不建议将此票务系统用于任何可公开发布的内容。身份验证系统应使用盐渍单向哈希,而不是可逆加密。