шифрование — шифрование PHP на сервере не будет работать & quot; mcrypt_get_iv_size & quot; функция

Поэтому я писал веб-приложение, и для некоторых целей мне нужно зашифровать строку и расшифровать ее позже, и все из моего кода отлично работает на localhost на Macbook в El Capitan 10.11.4 и XAMPP 5.6.15-1, но когда я загружаю код на сервере это просто не будет работать. Я нашел одну проблему (также я пробовал на нескольких серверах).

Итак, это мой код:

<?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 —— и —— 2 ——«, код после

mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC)

просто не работает на сервере, кто-нибудь знает почему?

РЕДАКТИРОВАТЬ: Я нашел ошибку, это была проблема хостинга, они делают некоторые странные вещи, в любом случае, спасибо!

-1

Решение

Вы не должны больше использовать функции 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 Расширение OpenSSL.
Но: крипто сложен, исключительно сложен. Хорошая крипто-оболочка требует, чтобы несколько криптографов и PHP-специалистов работали вместе, проверяя друг друга и дважды проверяя каждое изменение в коде. Изучение каждого решения.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector