服务器上的PHP加密赢得';t工作“;mcrypt“你得到四号尺码”;功能

服务器上的PHP加密赢得';t工作“;mcrypt“你得到四号尺码”;功能,php,encryption,mcrypt,rijndael,cbc-mac,Php,Encryption,Mcrypt,Rijndael,Cbc Mac,因此,我在编写一个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($_

因此,我在编写一个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");
}
只是无法在服务器上工作,有人知道为什么吗


编辑:我发现了错误,这是主机问题,他们做了一些奇怪的事情,无论如何谢谢

您不应该再使用MCrypt函数了。为什么?因为MCrypt被认为是废弃软件。长期以来,图书馆不再积极维护,也不再固定

那么,你的问题的解决方案是什么? 快速、简单和最安全的选择是使用一个

使用简单方法执行强加密的示例:

// Assuming a PSR-4 compatible autoloader

use Driftwood\SymmetricEncryption;
$password = 'correct horse battery staple';

$crypto = new SymmetricEncryption(20);

$encrypted = $crypto->encrypt('Never roll your own crypto.', $password);
$decrypted = $crypto->decrypt($encrypted, $password);

echo $decrypted; // Never roll your own crypto.


如果您真的想创建自己的加密库(您不应该),那么推荐的解决方案是使用PHP的。
但是:加密很难,特别难。一个好的密码包装器需要多个密码学家和PHP专家共同工作,相互检查,并对代码中的每个更改进行双重检查。仔细检查每一个决定。

错误检查说什么?谢谢,但我想我发现了错误,问题是我在000webhost.com使用免费主机,他们在识别.html文件时添加跟踪分析的脚本,我只需要在读取文件时删除该脚本代码,一切正常,无论如何,谢谢你,很高兴知道这件事已经解决了。顺便说一句,我希望你不打算为这项服务付费;简直糟透了。那里有更好的免费托管服务。几年前我就用过这个,即使不是更糟,也很糟糕。唉,凭经验吧;-)当我看到一个好的主机时,我知道它是一个糟糕的主机服务。理想情况下,为一个好的主机付费会让世界变得不同,而HostGator是一个好的主机。对于一个免费的主机,我使用了AwardSpace并取得了良好的效果。旁注:我与他们没有任何关系(作为免责声明)。我看到Pixelfck/SymmetricEncryption的问题是缺乏文档。它支持哪些加密原语(仅加密?),它是否提供加密身份验证(似乎),数据格式是什么(读取代码),所有这些都是互操作性所必需的。作为一个需要的例子,RNCryptor提供了一个@zaph,是的,我认为你应该打开一个问题,要求增加文档。他们很清楚这是经过身份验证的加密(加密然后是mac),尽管[第三点];我绝对不会推荐它。我和一位(appsec)同事分析了代码(虽然我们不是密码学家),我们发现代码有很好的文档记录,而且质量很高。当然,代码注释并不能代替适当的文档。或者:代码注释是文档化的,版本2昨天刚刚发布。
// Assuming a PSR-4 compatible autoloader

use Driftwood\SymmetricEncryption;
$password = 'correct horse battery staple';

$crypto = new SymmetricEncryption(20);

$encrypted = $crypto->encrypt('Never roll your own crypto.', $password);
$decrypted = $crypto->decrypt($encrypted, $password);

echo $decrypted; // Never roll your own crypto.