2010-12-20 155 views
3

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

回答

0

没有看到你的代码,不可能知道问题可能是什么(这就是为什么你还没有答案)。但是,如果您以相同的方式对字符串进行加密,只要您使用相同的加密密钥,它应该是相同的。在CI的加密类(see here),你可以在config.php文件中像这样做:

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

是的,我有这些设置相同的服务器和开发机器。但他们不匹配登录和退出应用程序。代码在服务器和我的开发机器上是相同的。 – Karl 2010-12-22 04:52:54

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; 

    } 
} 

这将导致笨加密的行为在任何环境一样。

恕我直言,加密库应该从来没有默默地改变用于加密的算法基于环境。 Automagic加密算法的改变是一个可怕的想法。

+0

我会给你几个票。我结束了一些垃圾数据,但无法弄清楚。 m_crypt函数被禁用。现在我需要使用m_crypt解密旧数据并在新方法中加密。简直愚蠢! – machineaddict 2013-10-02 10:11:34

+0

选项二对我来说工作正常。 – 2017-09-19 07:21:20

1

我一直在寻找一个答案,但我想出了解决方案,它也许含糊,但应该是很简单的新手:

  1. 安装libmcrypt并安装的php-mcrypt的

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

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

    延长= mcrypt.so

  4. 重新启动Apache或任何Web服务器使用。

0

在config.php文件中使用此项。它会给你一个不同的关键,​​但结果将是相同的:

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