openssl_private_encrypt()返回的0输出假(openssl_private_e

2019-10-18 19:50发布

我试图使用PHP函数openssl_private_encrypt()来加密之前上传的文件在保存它(见下面的代码片段),但是它的布尔是返回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);

没有人有任何想法,为什么这不工作?

谢谢

Answer 1:

我不知道PHP,但在C / C ++(OpenSSL的)的非对称加密(RSA为主)适用于长度小于密钥大小的数据。 并且通常它被用于加密哈希值。 如果要加密大(中〜256字节)的数据,你最好使用像AES或TriDES一些对称的(块)密码的数量。 对称加密法的方式要快得多。

PS对不起,我没有足够的信誉来把这个帖子变成注释。



Answer 2:

你应该正确初始化私有密钥( 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);


文章来源: openssl_private_encrypt() returns false with output of 0