openssl_private_encrypt()返回false,输出为0

时间:2013-10-21 18:23:34

标签: php encryption openssl

我正在尝试使用PHP函数openssl_private_encrypt()在保存之前加密上传的文件(请参阅下面的代码片段),但是它的bool返回false并且加密的内容返回没有返回任何内容。没有显示或报告错误。

        $data = file_get_contents($_FILES['files']['tmp_name'][0]);

        openssl_private_encrypt($data,$encrypted,$key);

        $hash = sha1($encrypted);
        file_put_contents('/path/to/folder/'.$hash,$encrypted);

有没有人知道为什么这不起作用?

由于

2 个答案:

答案 0 :(得分:3)

我不确定PHP,但在C / C ++(OpenSSL)中,非对称加密(主要是RSA)适用于长度小于密钥大小的数据。通常它用于加密哈希值。如果要加密大量(大约256字节)数据量,最好使用AES或TriDES等对称(块)密码。顺便说一下,对称密码要快得多。

PS抱歉,我没有足够的声誉将这篇文章发表评论。

答案 1 :(得分:1)

您应该正确初始化私钥(http://pl1.php.net/manual/en/function.openssl-pkey-get-private.php

$key = openssl_pkey_get_private ('file://path/to/file.pem');
$data = file_get_contents($_FILES['files']['tmp_name'][0]);

openssl_private_encrypt($data,$encrypted,$key);

$hash = sha1($encrypted);
file_put_contents('/path/to/folder/'.$hash,$encrypted);