生产服务器和本地服务器上的codeigniter加密

时间:2010-12-20 00:46:03

标签: codeigniter encryption

使用codeigniter加密类的加密密码是否会在两台不同的计算机上生成相同的加密密码?例如,我有一个生产站点在线与一些主机,我在我的计算机上本地安装。但是当我将数据库从一个数据库还原到另一个数据库时,密码不匹配。

4 个答案:

答案 0 :(得分:2)

我知道这是一个老问题,但我遇到了同样的问题并想出来......

CodeIgniter的加密库在不同的环境中表现不同。具体来说,库会自动检测您是否安装了PHP mcrypt扩展,如果安装,则使用完全不同的算法。

您的服务器上可能安装了mcrypt,而不是在开发环境中,反之亦然。

有两种方法可以解决这个问题。无论哪种方式,您都需要通过创建MY_Encrypt.php类来扩展内置加密类:

选项一:始终使用mcrypt,如果未安装则会大声失败:

class MY_Encrypt extends CI_Encrypt
{
    public function __construct()
    {
        if ( ! function_exists('mcrypt_encrypt')) {
            throw new Exception("Encryption requires mcrypt PHP extension!");
        }

        parent::__construct();
    }
}

选项二:永远不要使用mcrypt,即使已安装:

class MY_Encrypt extends CI_Encrypt
{
    public function __construct()
    {
        parent::__construct();

        //Pretend Mcrypt doesn't exist no matter what
        $this->_mcrypt_exists = FALSE;

    }
}

这将导致CodeIgniter加密在每个环境中的行为方式相同。

恕我直言,加密库永远不会默默地改变基于环境的加密算法。自动加密算法的改变是一个糟糕的主意。

答案 1 :(得分:1)

我一直在寻找答案,但我想出了解决方案,它可能含糊不清但对新手应该很简单:

  1. 安装 libmcrypt 并安装 php-mcrypt

  2. 编辑php.ini文件。一些发行版可能有所不同,我的位于:/etc/php/php.ini

  3. 找到所有扩展名的位置并添加取消注释或将以下内容添加到php.ini文件中。

    延长= mcrypt.so

  4. 重启apache或您使用的任何网络服务器。

答案 2 :(得分:0)

如果没有看到您的代码,就无法确定问题所在(这就是为什么您还没有答案)。但是,如果您以相同的方式加密字符串,只要您使用相同的加密密钥,它就应该是相同的。在CI的加密类(see here)中,您可以在config.php文件中执行此操作,如下所示:

$config['encryption_key'] = "YOUR KEY";

答案 3 :(得分:0)

在config.php文件中使用它。它将为您提供不同的密钥,但结果将是相同的:

$config['encryption_key'] = "YOUR KEY";
相关问题