У меня возникли проблемы с фильтрами шифрования 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)
Вы передаете ‘mcrypt.rijndael-128’ вместо ‘mдеcrypt.rijndael-128 ‘при попытке прочитать файл.
В любом случае, фильтры действительно мощные и часто удобные, но вам не следует использовать именно этот, так как он не обеспечивает аутентификацию, что очень важно в криптографии.
Других решений пока нет …