Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的加密和解密算法_Php_Algorithm_Codeigniter_Encryption_Cryptography - Fatal编程技术网

PHP中的加密和解密算法

PHP中的加密和解密算法,php,algorithm,codeigniter,encryption,cryptography,Php,Algorithm,Codeigniter,Encryption,Cryptography,我想对发送到API的数据进行加密。为此,我需要一个更安全的PHP加密和解密算法。目前我正在使用codeigniter开发我的应用程序 实际上,通过阅读一些堆栈溢出论坛,我们无法解密md5转换的字符串。但我们有在线MD5解密 它们是如何工作的 MD5不是加密,而是散列 无法反转MD5哈希。通过保留md5哈希结果的数据库,您可以在线找到对md5哈希进行反向工程的工具 如果您想研究PHP中的加密,这里是一个很好的开始MD5不是加密,而是散列 无法反转MD5哈希。通过保留md5哈希结果的数据库,您可以在

我想对发送到API的数据进行加密。为此,我需要一个更安全的PHP加密和解密算法。目前我正在使用codeigniter开发我的应用程序

实际上,通过阅读一些堆栈溢出论坛,我们无法解密md5转换的字符串。但我们有在线MD5解密

它们是如何工作的


MD5不是加密,而是散列

无法反转MD5哈希。通过保留md5哈希结果的数据库,您可以在线找到对md5哈希进行反向工程的工具


如果您想研究PHP中的加密,这里是一个很好的开始

MD5不是加密,而是散列

无法反转MD5哈希。通过保留md5哈希结果的数据库,您可以在线找到对md5哈希进行反向工程的工具

如果您想研究PHP中的加密,这里是一个很好的开始(注意:这是一个核心PHP函数)

密码############# 函数加密($data) { 对于($i=0,$key=27,$c=48;$i(注意:这是一个核心php函数)

密码############# 函数加密($data) {
对于($i=0,$key=27,$c=48;$i,其他答案表明MD5不是加密方法,因此需要使用某种加密算法

我要说的是,您应该使用业界最好的AES加密,并且您将获得每种语言支持的类,例如OBJC/PHP/JAVA/.NET/NODE.JS等

由于您在Codeignator工作,我有一个库,您可以直接使用,我希望它能解决您的问题

这里是库代码,只是为了使用php的MCRYPT扩展来更新它,这在大多数服务器中通常都是启用的。 图书馆课

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
Class Api_encrypt
{

    protected $CI;
    private $_encryptKey;
    private $_MD5Key;
    private $_MD5IV;
    private $_apiParams;

    public function __construct()
    {
        $this->CI = & get_instance();
        $this->_encryptKey = $this->CI->config->item("WS_ENC_KEY");
        $this->_MD5Key = substr(md5($this->_encryptKey), 0, 16);
        $this->_MD5IV = str_repeat("\0", mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));
    }

    public function encrypt($sValue = '')
    {
        $block = 16;
        $pad = $block - (strlen($sValue) % $block);
        $sValue .= str_repeat(chr($pad), $pad);
        $str_output = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $this->_MD5Key, $sValue, MCRYPT_MODE_CBC, $this->_MD5IV));
        $str_output = str_replace(array('+', '/', '='), array('-', '_', '.'), $str_output);
        return $str_output;
    }

    public function decrypt($sValue = '')
    {
        //$sValue = str_replace('~','+',$sValue);
        $sValue = str_replace(array('-', '_', '.'), array('+', '/', '='), $sValue);
        $sValue = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->_MD5Key, base64_decode($sValue), MCRYPT_MODE_CBC, $this->_MD5IV);
        $block = 16;
        $pad = ord($sValue[($len = strlen($sValue)) - 1]);
        $len = strlen($sValue);
        $pad = ord($sValue[$len - 1]);
        $str_output = substr($sValue, 0, strlen($sValue) - $pad);
        return $str_output;
    }

    public function encryptData($sValue = '')
    {
        $block = 16;
        $pad = $block - (strlen($sValue) % $block);
        $sValue .= str_repeat(chr($pad), $pad);
        $str_output = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $this->_MD5Key, $sValue, MCRYPT_MODE_CBC, $this->_MD5IV));
        return $str_output;
    }

    public function decryptData($sValue = '')
    {
        $str_output = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->_MD5Key, base64_decode($sValue), MCRYPT_MODE_CBC, $this->_MD5IV);
        $block = 16;
        $pad = ord($str_output[($len = strlen($str_output)) - 1]);
        $len = strlen($str_output);
        $pad = ord($str_output[$len - 1]);
        $str_output = substr($str_output, 0, strlen($str_output) - $pad);
        return $str_output;
    }

    public function decrypt_params($request_arr = array())
    {
        if (!is_array($request_arr) || count($request_arr) == 0) {
            return $request_arr;
        }
        foreach ($request_arr as $key => $val) {
            $param_val = str_replace(' ', '+', $val);
            $request_arr[$key] = $this->decryptData($param_val);
        }
        return $request_arr;
    }
}

既然你说你正在用PHP-CI开发API,我建议你检查一下这个工具>,它们提供了一个可视化的界面,我们可以通过这个界面创建API,它们还提供了生成的API源代码,我们可以用它部署在我们自己的服务器上。我已经在一些项目中使用了它,它确实帮助了我。

r答案建议MD5不是加密方法,因为您需要使用一些加密算法

我要说的是,您应该使用业界最好的AES加密,并且您将获得每种语言支持的类,例如OBJC/PHP/JAVA/.NET/NODE.JS等

由于您在Codeignator工作,我有一个库,您可以直接使用,我希望它能解决您的问题

这里是库代码,只是为了使用php的MCRYPT扩展来更新它,这在大多数服务器中通常都是启用的。 图书馆课

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
Class Api_encrypt
{

    protected $CI;
    private $_encryptKey;
    private $_MD5Key;
    private $_MD5IV;
    private $_apiParams;

    public function __construct()
    {
        $this->CI = & get_instance();
        $this->_encryptKey = $this->CI->config->item("WS_ENC_KEY");
        $this->_MD5Key = substr(md5($this->_encryptKey), 0, 16);
        $this->_MD5IV = str_repeat("\0", mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));
    }

    public function encrypt($sValue = '')
    {
        $block = 16;
        $pad = $block - (strlen($sValue) % $block);
        $sValue .= str_repeat(chr($pad), $pad);
        $str_output = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $this->_MD5Key, $sValue, MCRYPT_MODE_CBC, $this->_MD5IV));
        $str_output = str_replace(array('+', '/', '='), array('-', '_', '.'), $str_output);
        return $str_output;
    }

    public function decrypt($sValue = '')
    {
        //$sValue = str_replace('~','+',$sValue);
        $sValue = str_replace(array('-', '_', '.'), array('+', '/', '='), $sValue);
        $sValue = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->_MD5Key, base64_decode($sValue), MCRYPT_MODE_CBC, $this->_MD5IV);
        $block = 16;
        $pad = ord($sValue[($len = strlen($sValue)) - 1]);
        $len = strlen($sValue);
        $pad = ord($sValue[$len - 1]);
        $str_output = substr($sValue, 0, strlen($sValue) - $pad);
        return $str_output;
    }

    public function encryptData($sValue = '')
    {
        $block = 16;
        $pad = $block - (strlen($sValue) % $block);
        $sValue .= str_repeat(chr($pad), $pad);
        $str_output = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $this->_MD5Key, $sValue, MCRYPT_MODE_CBC, $this->_MD5IV));
        return $str_output;
    }

    public function decryptData($sValue = '')
    {
        $str_output = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->_MD5Key, base64_decode($sValue), MCRYPT_MODE_CBC, $this->_MD5IV);
        $block = 16;
        $pad = ord($str_output[($len = strlen($str_output)) - 1]);
        $len = strlen($str_output);
        $pad = ord($str_output[$len - 1]);
        $str_output = substr($str_output, 0, strlen($str_output) - $pad);
        return $str_output;
    }

    public function decrypt_params($request_arr = array())
    {
        if (!is_array($request_arr) || count($request_arr) == 0) {
            return $request_arr;
        }
        foreach ($request_arr as $key => $val) {
            $param_val = str_replace(' ', '+', $val);
            $request_arr[$key] = $this->decryptData($param_val);
        }
        return $request_arr;
    }
}

既然你说你正在用PHP-CI开发API,我建议你检查一下工具>,它们提供了一个可视化的界面,我们可以通过这个界面创建API,它们还提供了生成的API源代码,我们可以用它部署在我们自己的服务器上。我已经在一些项目中使用过,这对我真的很有帮助。

他们没有解密,他们只是拥有一个大型的值数据库和它们的md5等价物,然后进行查找……如果md5值不在数据库中,那么他们就不能做任何事情。我建议看看这个答案,这可能会有所帮助:CodeIgniter3提供了一个非常好的加密类。为什么不使用它呢?@MarkBaker谢谢你的信息。是的,你是对的,他们没有准确地解密字符串。最后,我必须选择加密和解密数据的方法,这取决于你是在谈论密码还是关于数据……对于密码,你应该始终对值进行散列,以便它不能被解密;PHP提供内置密码\u hash()/password\u verify()函数…对于加密数据,你应该使用mcryptThey不解密,他们只是有一个大型的值数据库和它们的md5等价物,并进行查找…如果md5值不在数据库中,那么他们不能做任何事情。我建议看看这个答案,它可能会有所帮助:CodeIgniter3提供了一个非常好的加密驴。你为什么不想使用它?@MarkBaker谢谢你的信息。是的,你是对的,他们没有准确地解密字符串。最后,我必须选择加密和解密我的数据的方法,这取决于你是在谈论密码,还是关于数据……对于密码,你应该总是散列值,这样它就不会被删除并且PHP提供了内置的密码\u hash()/password\u verify()函数…对于加密数据,你应该使用McRypt为什么OP应该使用这个?你有任何安全保证吗?它叫什么?@ArtjomB。这只是一个例子,它可以通过使用salt加密或任何其他方法来提高…为什么OP应该使用这个?你有任何安全保证吗?它叫什么?@ArtjomB。它只是一个例子,它是可以通过使用salt加密或任何其他方法进行升级。。。
//In Controller
$request_params = $this->input->get_post(NULL, TRUE);
$this->load->library('api_encrypt');
$decrypt_params = $this->api_encrypt->decrypt_params($request_params);

//do operations
//prepare response array

$encrypt_str = $this->api_encrypt->encrypt($response);