在PHP中调用未定义的函数openssl_public_encrypt()

时间:2013-08-20 17:46:33

标签: php wamp php-openssl

我正在使用WAMP 2.4.4。要加密字符串,我使用了“ MyEncryption ”类,但错误是:

  

调用未定义的函数openssl_public_encrypt()

在使用openssl_public_encrypt()

之前,是否有必须添加的特殊库
class MyEncryption
{

    public $pubkey = '...public key here...';
    public $privkey = '...private key here...';

    function encrypt($data)
    {
        if (openssl_public_encrypt($data, $encrypted, $this->pubkey))
            $data = base64_encode($encrypted);
        else
            throw new Exception('Unable to encrypt data. Perhaps it is bigger than the key size?');

        return $data;
    }

}

$url = new MyEncryption();
$d   = "Hello World";   
$enc = $url->encrypt($d);

echo "Encryption is: ", $enc;

5 个答案:

答案 0 :(得分:2)

  

使用openssl_public_encrypt()之前是否有必须添加的特殊库?

是的,它被称为OpenSSL,您可以在PHP手册中找到它:

根据您的操作系统风格,程序包名为php-openssl,您需要做的就是安装它。然后它应该在PHP中自动提供。

这与WAMP UI类似,您可以使用它来启用php_openssl。只有在您关注命令行时需要做更多工作,请参阅相关问题:

答案 1 :(得分:1)

请在WAMP中启用php_openssl扩展程序 - > PHP - > PHP扩展。

答案 2 :(得分:0)

PHP文档提供了有关how to make it work on Windows

的有用信息

答案 3 :(得分:0)

您可以使用phpseclib, a pure PHP RSA implementation,而不是openssl_public_encrypt。例如

<?php
include_once('Crypt/RSA.php'); 

$pubkey = file_get_contents('/path/to/public.key');

$rsa = new Crypt_RSA(); 
$rsa->loadKey($pubkey); 
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1); 
$ciphertext = $rsa->encrypt('ddd'); 

答案 4 :(得分:-1)

要使用openssl_函数,您必须

  

a)安装了OpenSSL,并且
  b)使用OpenSSL支持构建PHP。

请参阅PHP OpenSSL文档。

来自Why can't I use openssl_encrypt?

的回答