Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.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 Mcrypt_仅解密原始字符串的一部分_Php_Encryption_Mcrypt - Fatal编程技术网

PHP Mcrypt_仅解密原始字符串的一部分

PHP Mcrypt_仅解密原始字符串的一部分,php,encryption,mcrypt,Php,Encryption,Mcrypt,关于通过url传递加密字符串,我有一个奇怪的问题。我使用来自mcrypt()的base64加密来加密HTML()和decryptHTML() 我有一段代码要加密: $link_string = http_build_query(array('index_number'=>30843854, 'extra_attendence_id'=>27982423, 'target_temporary_id'=>378492085, 'date'=>'2016-05-06', 'ac

关于通过url传递加密字符串,我有一个奇怪的问题。我使用来自mcrypt()的base64加密来加密HTML()和decryptHTML()

我有一段代码要加密:

$link_string = http_build_query(array('index_number'=>30843854, 'extra_attendence_id'=>27982423, 'target_temporary_id'=>378492085, 'date'=>'2016-05-06', 'action'=>'OUT', 'target_id'=>390234), '', '&');
$link_string = encryptHTML($link_string);
然后我通过这个url传递它:

'localhost/website/controller/action/'.$link_string
然后我用这段代码解密了它:

$id = $this->request->param('id');
$id = decryptHTML($id);
parse_str($id, $arr_id2); 
var_dump($arr_id2);
$id = $this->request->param('id');
parse_str($id, $arr_id2); 

$the_DOMValue = $arr_id2['DOMvalue'];

$id = decryptHTML($arr_id2['crypted']);
parse_str($id, $arr_id);
var_dump($the_DOMValue); echo "<br>";
var_dump($arr_id);
我将如期得到这些回报:

array(6) { ["index_number"]=> string(8) "30843854" ["extra_attendence_id"]=> string(8) "27982423" ["target_temporary_id"]=> string(9) "378492085" ["date"]=> string(10) "2016-05-06" ["action"]=> string(3) "OUT" ["target_id"]=> string(6) "390234" }
下一种情况是,我仍然需要加密的链接,但需要从页面中的DOM元素附加一些其他值,因此我尝试

'localhost/website/controller/action/encrypt='.$link_string.'&DOMvalue=10000'
然后我用这段代码修改了解密:

$id = $this->request->param('id');
$id = decryptHTML($id);
parse_str($id, $arr_id2); 
var_dump($arr_id2);
$id = $this->request->param('id');
parse_str($id, $arr_id2); 

$the_DOMValue = $arr_id2['DOMvalue'];

$id = decryptHTML($arr_id2['crypted']);
parse_str($id, $arr_id);
var_dump($the_DOMValue); echo "<br>";
var_dump($arr_id);
我原来的绳子被剪短了!请注意,DOMvalue很好。 然后,我在两次解密之前检查了,如果给定的加密字符串不同:

在解密HTML的第一种情况下:

$id = $this->request->param('id');
var_dump($id);
$id = decryptHTML($id);
$id = $this->request->param('id');
parse_str($id, $arr_id2); 

$the_DOMValue = $arr_id2['DOMvalue'];           
var_dump($arr_id2['crypted']);
$id = decryptHTML($arr_id2['crypted']);
返回:

string(224) "zCQnh-rNP2R7h4UHyV5Dm5zp494DIIku5LWN51yYGMXBaHf0gJgEDw8UCuHRZxr-CkjkevHQ70kOPnSBQ9CJP6lZrFone-nDMDJhYlL8330wz+zud8-3tSWvdOLB7je5D-22aX4OrE3zlBYZZZtI-rMT73H0JGIRzZge2GzcZGLwS7Rj+GL5Ym-ET6JEHDShST4etgcQaEYXml-+BZ2+0BQKvubZEBOB"
string(224) "zCQnh-rNP2R7h4UHyV5Dm5zp494DIIku5LWN51yYGMXBaHf0gJgEDw8UCuHRZxr-CkjkevHQ70kOPnSBQ9CJP6lZrFone-nDMDJhYlL8330wz zud8-3tSWvdOLB7je5D-22aX4OrE3zlBYZZZtI-rMT73H0JGIRzZge2GzcZGLwS7Rj GL5Ym-ET6JEHDShST4etgcQaEYXml- BZ2 0BQKvubZEBOB"
关于第二种情况的HTML:

$id = $this->request->param('id');
var_dump($id);
$id = decryptHTML($id);
$id = $this->request->param('id');
parse_str($id, $arr_id2); 

$the_DOMValue = $arr_id2['DOMvalue'];           
var_dump($arr_id2['crypted']);
$id = decryptHTML($arr_id2['crypted']);
返回:

string(224) "zCQnh-rNP2R7h4UHyV5Dm5zp494DIIku5LWN51yYGMXBaHf0gJgEDw8UCuHRZxr-CkjkevHQ70kOPnSBQ9CJP6lZrFone-nDMDJhYlL8330wz+zud8-3tSWvdOLB7je5D-22aX4OrE3zlBYZZZtI-rMT73H0JGIRzZge2GzcZGLwS7Rj+GL5Ym-ET6JEHDShST4etgcQaEYXml-+BZ2+0BQKvubZEBOB"
string(224) "zCQnh-rNP2R7h4UHyV5Dm5zp494DIIku5LWN51yYGMXBaHf0gJgEDw8UCuHRZxr-CkjkevHQ70kOPnSBQ9CJP6lZrFone-nDMDJhYlL8330wz zud8-3tSWvdOLB7je5D-22aX4OrE3zlBYZZZtI-rMT73H0JGIRzZge2GzcZGLwS7Rj GL5Ym-ET6JEHDShST4etgcQaEYXml- BZ2 0BQKvubZEBOB"
在我看来完全一样,但奇怪的是,它的解密方式不同。我当然使用了相同的函数来解密这两个案例

有人能告诉我这件事吗

通过url传递加密字符串

这是个坏主意。句号

我使用来自mcrypt()的base64加密来加密HTML()和decryptHTML()

如果不了解这些函数的作用,这不是有用的信息,但是。使用libnaude(如果可以,则使用OpenSSL)

我原来的绳子被剪短了

它可能将+视为一个空格。使用
urlencode()
可以解决一个问题,但不能解决在没有消息身份验证码(MAC)的情况下使用mcrypt引入应用程序的问题。

imo,我建议在URL中使用字符串时不要使用base64\u编码/解码。为什么?它再次被编码。这是HTML中不应使用base64_编码/解码的地方。看:相反。或者,转换为十六进制字符串(
bin2hex
)和(
hex2bin)
。更长但非常安全,可以在HTML中的任何位置使用。。