【问题标题】:PHP Encryption filter not working properly with rijndaelPHP 加密过滤器无法与 rijndael 一起正常工作
【发布时间】:2015-10-22 00:32:03
【问题描述】:

我在使用加密过滤器http://php.net/manual/en/filters.encryption.php时遇到了一些问题

该代码适用于三重算法,但是,当更改为 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日志中没有错误)

【问题讨论】:

    标签: php encryption stream mcrypt rijndael


    【解决方案1】:

    您在尝试读取文件时传递的是“mcrypt.rijndael-128”而不是“mdecrypt.rijndael-128”。

    无论如何,过滤器确实很强大,而且通常很方便,但你不应该特别使用这个,因为它不提供身份验证,这在密码学中非常重要。

    【讨论】:

    • 谢谢!现在它起作用了。我认为字符串的 mcrypt 部分只是引用 mcrypt 库而不是其中的功能!
    猜你喜欢
    • 1970-01-01
    • 2013-09-15
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 2013-08-16
    相关资源
    最近更新 更多