我的项目中存在很大问题。我将项目开发成PYROCMS,并将PYROCMS开发成Codeigniter。但是,PYROCMS需要" Mcrypt扩展"。
我有服务器的ssh详细信息,但我没有权限在服务器上安装任何内容。
我需要" Mcrypt扩展"如何在没有安装或从任何地方下载的情况下工作,如果可能的话,将其上传到项目根目录中?。
我需要一个类似this的解决方案,如果没有安装 Mcrypt扩展,可以在laravel中使用这个打包到工作项目,请为 PYROCMS
今天是我今天需要上传的项目的最后一天无论发生什么,否则我会失去这个项目以及我的工作。请帮忙。
由于
答案 0 :(得分:2)
您可以使用自己的库覆盖默认库。您可以尝试以下代码:
P.S。:我还没有测试过这段代码:)
创建文件:
/codeigniter/application/libraries/MY_Encrypt.php
以下代码开始使用:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Encrypt extends CI_Encrypt {
public function __construct()
{
//parent::__construct();
}
/*
Create your custom encryption and decryption logic by
overriding function
*/
}
参考: https://ellislab.com/codeigniter/user-guide/general/creating_libraries.html
答案 1 :(得分:2)
答案 2 :(得分:1)
这是技巧,但可以与Pyrocms一起使用
基本上是焦炉,在以下模块中默认使用加密库
encryption
您的解决方案很少
将openssl
库与encrypt
一起使用,而不是mcrypt
库(其扩展名是system/codeigniter/libraries
),在这些模块中替换它。
或下载https://raw.githubusercontent.com/bcit-ci/CodeIgniter/develop/system/libraries/Encryption.php并放置在MY_Encrypt.php
中,并使用以下代码在system/cms/libraries
中创建CI_Encrypt
,以覆盖{ {1}}和encode
我们只是调用新加密类的decode
和encrypt
。
。
decrypt
3。或者,您可以创建自己的函数,然后直接加载
。
akshay@db-3325:/var/www/html/pyrocms/system/cms/libraries$ cat MY_Encrypt.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
require_once BASEPATH.'libraries/Encryption.php';
class MY_Encrypt extends CI_Encrypt {
protected $instance;
public function __construct(){
$this->instance = new CI_Encryption();
}
public function encode($data, $params = NULL){
return call_user_func_array(array($this->instance, "encrypt"), func_get_args());
}
public function decode($data, $params = NULL){
return call_user_func_array(array($this->instance, "decrypt"), func_get_args());
}
}
如下所示
akshay@db-3325:/var/www/html/pyrocms$ pwd
/var/www/html/pyrocms
# from index.php
require_once FCPATH.'compatibility.php';
require_once BASEPATH.'core/CodeIgniter'.EXT;
/* End of file index.php */
答案 3 :(得分:0)
打开,system / libraries / Encrpyte.php
转到第47行并更改
$this->_mcrypt_exists = TRUE;
转到第290行添加符号@
$init_size = @mcrypt_get_iv_size($this->_get_cipher(), $this->_get_mode());
转到第299行并添加符号@
return rtrim(@mcrypt_decrypt($this->_get_cipher(), $key, $data, $this->_get_mode(), $init_vect), "\0");
答案 4 :(得分:0)
请参阅此文件以获取帮助,我已从此处获取所有代码... encrypt.php 我用这个解决了这个问题。在CI-> system-> libraries-> encrypt.php文件中 代替
if (($this->_mcrypt_exists = function_exists('mcrypt_encrypt')) === FALSE)
{
show_error('The Encrypt library requires the Mcrypt extension.');
}
我检查了mcrypt_encrypt函数。
$this->_mcrypt_exists = ( ! function_exists('mcrypt_encrypt')) ? FALSE : TRUE;
并基于如下所示的编码功能中使用的功能
function encode($string, $key = '')
{
$key = $this->get_key($key);
if ($this->_mcrypt_exists === TRUE)
{
$enc = $this->mcrypt_encode($string, $key);
}
else
{
$enc = $this->_xor_encode($string, $key);
}
return base64_encode($enc);
}
这是_xor_encode函数
function _xor_encode($string, $key)
{
$rand = '';
while (strlen($rand) < 32)
{
$rand .= mt_rand(0, mt_getrandmax());
}
$rand = $this->hash($rand);
$enc = '';
for ($i = 0; $i < strlen($string); $i++)
{
$enc .= substr($rand, ($i % strlen($rand)), 1).(substr($rand, ($i % strlen($rand)), 1) ^ substr($string, $i, 1));
}
return $this->_xor_merge($enc, $key);
}
和_xor_merge函数
function _xor_merge($string, $key)
{
$hash = $this->hash($key);
$str = '';
for ($i = 0; $i < strlen($string); $i++)
{
$str .= substr($string, $i, 1) ^ substr($hash, ($i % strlen($hash)), 1);
}
return $str;
}