没有斜杠的Codeigniter加密

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了没有斜杠的Codeigniter加密相关的知识,希望对你有一定的参考价值。

我知道这可能看起来像这个问题重复:Ignore slash while using encryption in Codeigniter。但我仍然没有得到答案。

我想将加密的电子邮件名称作为URL发送到他们的电子邮件帐户。然后解密该URL以搜索我的数据库中是否存在该电子邮件名称以允许该电子邮件进入我的系统。

问题是:

  1. 如果我在加密后使用urlencode或base64_encode,则在解密后总是会产生空值来搜索数据库。我认为这是因为加密值总是在变化。
  2. 如果我使用临时加密,它可能具有(“/”)字符。
  3. 如果我只使用编码,没有加密,它可能允许电子邮件名称访问我的系统。

最后,我找到了一些库:Ignore Slash while using encryption in codeigniter - GitHub

但它给了我这个错误:未定义的属性:CI_Loader :: $ my_encrypt

我不知道我做错了什么,我已经:

  1. 将班级名称首字母大写。
  2. 使用与类名相同的文件名。 (也大写)
  3. 将扩展更改为CI_Encryption,因为已弃用Encrypt类。
  4. 在所有方法之前插入public function __construct() {parent::__construct();}
  5. 将文件放在应用程序/库中。
  6. 加载库$this->load->library('my_encrypt');
  7. 使用$this->my_encrypt->encode($key);加载方法这是给我一个错误的行。

我知道这可能听起来像一个简单的错误,但我也在使用另一个第三方库,但它根本没有给我一个错误。

任何人都可以帮我找到那里的错误/缺失步骤吗?


更新 - 在我在控制器中加载库之前,我想先查看结果。但即使我把代码放在控制器中,它也没有给我任何改变。这是代码:

    $key = 'example@gmail.com';
    $this->load->library('my_encrypt');

    $segment = $this->my_encrypt->encode($key);  
    echo $segment; 
    echo ( $this->my_encrypt->decode($segment) );

更新:修复库代码以使用CI_Encryption库进行扩展

答案

你加载了图书馆吗?将库命名为应用程序库中的MY Encrypt.php

<?php

class MY_Encrypt extends CI_Encrypt
{
    /**
     * Encodes a string.
     * 
     * @param string $string The string to encrypt.
     * @param string $key[optional] The key to encrypt with.
     * @param bool $url_safe[optional] Specifies whether or not the
     *                returned string should be url-safe.
     * @return string
     */
    public function __construct() {
        parent::__construct();
    }

    function encode($string, $key="", $url_safe=TRUE)
    {
        $ret = parent::encode($string, $key);

        if ($url_safe)
        {
            $ret = strtr(
                    $ret,
                    array(
                        '+' => '.',
                        '=' => '-',
                        '/' => '~'
                    )
                );
        }

        return $ret;
    }

    /**
     * Decodes the given string.
     * 
     * @access public
     * @param string $string The encrypted string to decrypt.
     * @param string $key[optional] The key to use for decryption.
     * @return string
     */
    function decode($string, $key="")
    {
        $string = strtr(
                $string,
                array(
                    '.' => '+',
                    '-' => '=',
                    '~' => '/'
                )
        );

        return parent::decode($string, $key);
    }
}
?>

现在调用加密库并使用加密类而不是my_encrypt

$key='Welcome';
    $this->load->library('encrypt');
    $key1= $this->encrypt->encode($key);

    echo $key1;
另一答案

修复以扩展CI_Encryption库,抱歉打扰。 :)

class MY_Encrypt extends CI_Encryption
{
   /**
 * Encodes a string.
 * 
 * @param string $string The string to encrypt.
 * @param string $key[optional] The key to encrypt with.
 * @param bool $url_safe[optional] Specifies whether or not the
 *                returned string should be url-safe.
 * @return string
 */
public function __construct() {
parent::__construct();
}

function encode($string)
{
    $ret = parent::encrypt($string);

    if ( !empty($string) )
    {
        $ret = strtr(
                $ret,
                array(
                    '+' => '.',
                    '=' => '-',
                    '/' => '~'
                )
            );
    }

    return $ret;
}

/**
 * Decodes the given string.
 * 
 * @access public
 * @param string $string The encrypted string to decrypt.
 * @param string $key[optional] The key to use for decryption.
 * @return string
 */
function decode($string)
{
    $string = strtr(
            $string,
            array(
                '.' => '+',
                '-' => '=',
                '~' => '/'
            )
    );

    return parent::decrypt($string);
}
}
?>

以上是关于没有斜杠的Codeigniter加密的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter 助手重复 HTML 代码片段

Codeigniter - 当 URL 以斜杠结尾时,相对 URL 停止工作?

url 编码的正斜杠破坏了我的 codeigniter 应用程序

Codeigniter 4:无法解密加密的帖子数据

CodeIgniter 加密类到 java

php 错误:加密库需要 codeigniter 中的 Mcrypt 扩展