Фильтр шифрования PHP не работает должным образом с rijndael

У меня возникли проблемы с фильтрами шифрования http://php.net/manual/en/filters.encryption.php

Код прекрасно работает с алгоритмом tripledes, однако при переходе на rijndael-256 или 128 он просто выдает искаженные данные при чтении.

Я подумал, что это ошибка с системой IV или системой ключей, поэтому я попытался использовать жестко запрограммированную пару как для чтения, так и для записи, однако она по-прежнему выдает искаженные данные.

public function writeEncrypt($path, $data){

$key = "1234567812345678";
$iv = "1234567812345678";
$opts = array('iv'=>$iv, 'key'=>$key, 'mode'=>'cbc');

$fp = fopen($path, 'wb');
stream_filter_append($fp, 'mcrypt.rijndael-128', STREAM_FILTER_WRITE, $opts);
fwrite($fp, $data);
fclose($fp);

return true;
}

public function readDecrypt($path){

$key = "1234567812345678";
$iv = "1234567812345678";
$opts = array('iv'=>$iv, 'key'=>$key, 'mode'=>'cbc');

$fp = fopen($path, 'rb');
stream_filter_append($fp, 'mcrypt.rijndael-128', STREAM_FILTER_READ, $opts);
$data = rtrim(stream_get_contents($fp));
fclose($fp);

header("Content-Type: application/zip");
header("Content-Length: " . count($data));

echo $data;
}

Все данные вводятся в двоичном виде.
Что я делаю неправильно?
(Нет ошибок в журнале php)

1

Решение

Вы передаете ‘mcrypt.rijndael-128’ вместо ‘mдеcrypt.rijndael-128 ‘при попытке прочитать файл.

В любом случае, фильтры действительно мощные и часто удобные, но вам не следует использовать именно этот, так как он не обеспечивает аутентификацию, что очень важно в криптографии.

2

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

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

По вопросам рекламы [email protected]