安装后无法登录.数据库显示散列密码:


Cannot login after installing. Database shows hashed password:

让我先说一下,我不是写php的最佳人选。 我也没有编写以下代码,但正在寻找一些关于我所缺少的指导,就这里更大的过程中发生的事情而言。

在最初安装使用CodeIgniter和twitter-Bootstrap框架的免费票务软件后,数据库使用我的管理员电子邮件设置了一个默认管理员帐户,并且应该是管理员的默认密码:

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);

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

CodeIgniter 的加密库使用 mcrypt(如果可用),否则会回退到自身安全性较低的方法。

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

有几种可能的选项:

  1. 首先将 mcrypt 扩展添加到服务器上的 PHP 安装中,然后使用您在 tblstaffs 中指定的电子邮件地址和密码"admin"(正确的密码;我已经重现了您的问题并进行了检查。
  2. 不要安装 mcrypt,并使用票务系统中的密码恢复过程,让它通过电子邮件将新密码发送到您指定的电子邮件地址。这将使用当前有效的加密方法将现有密码替换为新密码。显然,您需要确保tblstaffs中的电子邮件地址是有效的,并且该外发邮件正在您的PHP安装中工作。
  3. 手动将 tblstaffs 中管理员用户的加密密码更新为与非 mcrypt 加密兼容的密码。我相信"AmJUYVxsAzgBNQ=="是一个可能适用于密码"admin"的值。

不过,就我个人而言,我不建议将这个票务系统用于任何公开可用的内容。身份验证系统应使用加盐的单向哈希,而不是可逆加密。

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

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==

这意味着您的代码点火器会议中可能有一个错误的加密密钥,无论是那个,还是实际的字符串:

08gv6gemSKxv09EImCsPLO94Nje6ZVAlFnuc13kohFwvC0kh/ESFEn1lEwL9bbSbrlym/UrO6wM9p0CGnjJHzg==

不是密码"admin"的正确加密密钥!