openssl_seal问题

时间:2012-05-02 21:54:33

标签: php openssl

在使用PHP中的openssl_seal函数加密公钥中进行加密时遇到了一些问题...

我创造了公众&使用openSSL命令行工具的私钥:

openssl genrsa -des3 -out private.pem 1024

openssl rsa -in private.pem -out public.pem -outform PEM -pubout

但是,当我在我的PHP代码中运行它时,我会收到以下错误:

openssl_seal() [function.openssl-seal]: Don't know how to get public key from this private key
openssl_seal() [function.openssl-seal]: not a public key (1th member of pubkeys)

当我使用以下方法验证公钥时:openssl verify public.pem,我得到:

unable to load certificate
1876:error:0906D06C:PEM routines:PEM_read_bio:no start line:.\crypto\pem\pem_lib
.c:648:Expecting: TRUSTED CERTIFICATE

任何人都知道为什么会这样吗?

PHP代码:

public function encrypt($valueToEncrypt, $publicKeyFile)
{
    $pk = file_get_contents($publicKeyFile);
    $publicKey = openssl_pkey_get_public($pk);

    $encrypted = '';
    $a_envelope = array();
    $a_key = array($publicKey);
    if (openssl_seal($valueToEncrypt, $encrypted, $a_envelope, $a_key) === FALSE)
            {
                while ($msg = openssl_error_string())
                    echo $msg . "<br />\n";
                die('Failed to encrypt data!');
            }
            openssl_free_key($publicKey);
....

2 个答案:

答案 0 :(得分:1)

对于遇到相同问题的任何人,问题都与在Windows上安装xampp有关。在全新安装的php上运行命令行工作正常。

答案 1 :(得分:0)

除了StuffandBlah的回答:它实际上与Windows上的XAMPP中的Apache和PHP中的不同OpenSSL版本有关。这是a post如何解决问题(复制DLL)。