【发布时间】:2016-09-11 13:50:11
【问题描述】:
所以我正在编写一个 Web 应用程序,对于某些用途,我需要加密字符串并稍后解密,我的代码中的所有内容都可以在 El Capitan 10.11.4 和 XAMPP 5.6.15-1 上的 Macbook 上的 localhost 上完美运行,但是当我在服务器上上传代码它只是不起作用。我发现了一个问题(我也在多台服务器上尝试过)。
这是我的代码:
<?php
session_start();
header("Content-Type: text/html;charset=UTF-8");
if (isset($_POST["file"])) {
$filename = $_POST["file"];
//$filename = $_GET["file"];
$filename = substr($filename, 12);
$username = $_SESSION["username"];
$key = $_SESSION["key"];
$filename = "../users/$username/text/" . $filename;
$fileNumber = $_POST["number"];
///Cloude/users/antonio/text/teext/file2.txt
// Cloude/script
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
echo $contents;
$decrypt = str_replace(" ", "+", $contents);
echo " ------ 1 ------ ";
$decrypt = explode('|', $decrypt.'|');
$decoded = base64_decode($decrypt[0]);
$iv = base64_decode($decrypt[1]);
echo " ------ 2 ------";
if(strlen($iv)!==mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC)){ return false; }
echo " ------ 3 ------";
$key = pack('H*', $key);
$decrypted = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $decoded, MCRYPT_MODE_CBC, $iv));
$mac = substr($decrypted, -64);
$decrypted = substr($decrypted, 0, -64);
$calcmac = hash_hmac('sha256', $decrypted, substr(bin2hex($key), -32));
if($calcmac!==$mac){ return false; }
$decrypted = unserialize($decrypted);
echo json_encode($decrypted . "qJB0rGtIn5UB1xG03efyCp55");
}
而且,此回声仅用于测试哪条线路不起作用。所以当我尝试运行它时,它只会打印“------ 1 ------ and ------ 2 ------”,之后的代码
mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC)
只是不能在服务器上工作,有谁知道为什么?
编辑:我发现了错误,这是托管问题,他们做了一些奇怪的事情,无论如何谢谢!
【问题讨论】:
-
错误检查说什么?
-
谢谢,但我想我发现了错误,问题是我在 000webhost.com 使用免费托管,当他们识别 .html 文件添加跟踪分析的脚本时,我只需要删除该脚本读取文件时的代码,一切都很好,谢谢
-
很高兴知道它已解决。
-
顺便说一句,我希望你不打算为这项服务付费;这简直太糟糕了。那里有更好的免费托管服务。几年前我用过那个,但它们仍然很糟糕,如果不是更糟的话。 sigh 从经验中汲取经验 ;-) 当我看到一个糟糕的托管服务时,我知道它。
-
理想情况下,为一个好的主机付费会改变世界,而 HostGator 是一个很好的选择。对于免费主机,我使用 AwardSpace 取得了不错的效果。旁注:我与他们没有任何关系(作为免责声明)。
标签: php encryption mcrypt rijndael cbc-mac