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

生产服务器和本地服务器上的codeigniter加密,codeigniter,encryption,Codeigniter,Encryption,使用codeigniter的加密类加密的密码会在两台不同的机器上产生相同的加密密码吗?例如,我有一个在线的生产站点和一些主机,并且我的计算机上有本地安装。但是,当我将数据库从一个还原到另一个时,密码不匹配。如果没有看到您的代码,就无法判断问题可能出在哪里(这就是为什么您还没有答案)。但是,如果以相同的方式加密字符串,只要使用相同的加密密钥,它就应该是相同的。在CI的加密类()中,您可以在config.php文件中这样做: $config['encryption_key'] = "YOUR KEY

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

如果没有看到您的代码,就无法判断问题可能出在哪里(这就是为什么您还没有答案)。但是,如果以相同的方式加密字符串,只要使用相同的加密密钥,它就应该是相同的。在CI的加密类()中,您可以在
config.php
文件中这样做:

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

我知道这是一个老问题,但我也遇到了同样的问题并解决了

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();
    }
}
class MY_Encrypt extends CI_Encrypt
{
    public function __construct()
    {
        parent::__construct();

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

    }
}
选项二:切勿使用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();
    }
}
class MY_Encrypt extends CI_Encrypt
{
    public function __construct()
    {
        parent::__construct();

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

    }
}
这将导致CodeIgniter加密在每个环境中都以相同的方式运行


IMHO,加密库不应基于环境悄悄更改用于加密的算法。Automagic加密算法更改是一个糟糕的想法。

我一直在寻找答案,但我找到了解决方案,它可能很模糊,但对于新手来说应该足够简单:

  • 安装libmcrypt和php mcrypt

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

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

    扩展=mcrypt.so

  • 重新启动apache或您使用的任何Web服务器


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

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

    是的,我在服务器和开发机器上有相同的设置。但它们与登录和退出应用程序不匹配。服务器上的代码和我的开发机器上的代码是一样的。我会给你更多的投票。最后我得到了一些垃圾数据,但我无法理解。m_crypt函数已禁用。现在我需要用m_crypt解密旧数据,并用新方法加密。简直太愚蠢了!