PHP 加密过滤器无法与 rijndael 一起正常工作
PHP Encryption filter not working properly with 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 日志中没有错误)
您在尝试读取文件时传递的是 'mcrypt.rijndael-128' 而不是 'mdecrypt.rijndael-128'。
无论如何,过滤器真的很强大而且通常很方便,但是你不应该特别使用这个,因为它不提供身份验证,这在密码学中非常重要。
我在使用加密过滤器时遇到了一些问题 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' 而不是 'mdecrypt.rijndael-128'。
无论如何,过滤器真的很强大而且通常很方便,但是你不应该特别使用这个,因为它不提供身份验证,这在密码学中非常重要。