【问题标题】:Changing encryption cipher and method in CodeIgniter encrypt class, changes globally the settings?更改 CodeIgniter 加密类中的加密密码和方法,全局更改设置?
【发布时间】:2013-04-09 12:28:21
【问题描述】:

我在 CodeIgniter 中有以下类

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 
class ZoEncryption {

public $_CI;
public function __construct() {
    $this->_CI = & get_instance();
    $this->_CI->encrypt->set_cipher(MCRYPT_BLOWFISH);
    $this->_CI->encrypt->set_mode(MCRYPT_MODE_CBC);
}
function encode($str, $key) {
    return $this->_CI->encrypt->encode($str, $key);
}
function decode($str, $key) {
    return $this->_CI->encrypt->decode($str, $key);
    }
}

?>

我在我的 ci 应用程序中使用这个库来加密和解密数据库中的用户内容。我正在指定密码和模式,因为我希望在加密/解密中具有特定的逻辑,并且如果此更改的编码将来我不希望出现意外。

我也在使用password_compat 库来尽早实现 PHP 5.5 的新密码哈希模式。

这个库允许我基于 PHP 的未来构建我的用户密码哈希逻辑。

如果我没有在构造函数中设置密码和模式并将相关行放在我的基本控制器构造函数中,那么我的密码哈希不起作用。

特别是如果我在MY_Controller中放入以下两行,密码验证不起作用。

以下行是否会影响全局 CI?

$CI->encrypt->set_cipher(MCRYPT_BLOWFISH);

$CI->encrypt->set_mode(MCRYPT_MODE_CBC);

【问题讨论】:

    标签: php codeigniter encryption


    【解决方案1】:

    不,它不会更改全局设置。它只会影响直接附加到您定义它的位置的代码。

    如果您希望更改是全局性的,您将不得不破解内核 create a libraryoverride/extend 内核。

    【讨论】:

    • 但正如我所说,它确实改变了一些东西。我会强调我的问题是什么。
    • 如果您没有明确设置密码和模式 CI 将使用默认值。如果您使用默认值对某些内容进行编码,则无法使用其他密码或模式对其进行解码。更有可能是您的图书馆破坏了事物,而不是您在 CI 中设置了密码和模式。
    • 但是如果我没有在我的顶级控制器中指定模式和密码,那么 lib 工作正常。及其非常著名的库,用于将 5.5 密码散列功能带入旧版本...
    • 如果您使用库进行加密,为什么 CI 密码设置如此重要?要么使用库进行加密,要么使用 CI 的加密。两者混用没有意义……
    • 如果你看一下:github.com/ircmaxell/password_compat/blob/master/lib/…,你会看到
    猜你喜欢
    • 2019-05-09
    • 1970-01-01
    • 2019-04-07
    • 2021-06-27
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    相关资源
    最近更新 更多