这是简单的PHP代码文件
<?php
$source = "HelloWorld!!!";
echo "Source: $source<br/>";
$fp = fopen ( "../ssl/pubkey.key", "r" );//读取公钥
$pub_key = fread ( $fp, 8192 );
fclose ( $fp );
openssl_get_publickey ( $pub_key );
echo $pub_key."<br/>";openssl_public_encrypt ( $source, $crypttext, $pub_key );
die();//无法执行到这个位置
echo "String crypted: $crypttext";$fp = fopen ( "../ssl/privatekey.key", "r" );
$priv_key = fread ( $fp, 8192 );
fclose ( $fp );
// $passphrase is required if your key is encoded (suggested)
$res = openssl_get_privatekey ( $priv_key, $passphrase );
/*
* NOTE: Here you use the returned resource value
*/
openssl_private_decrypt ( $crypttext, $newsource, $res );
echo "String decrypt : $newsource";
?> 结果如下所示(在IE中显示):
Internet Explorer 无法显示该网页您可以尝试以下操作:诊断连接问题 我用的是XAMPP1.7.1版本
<?php
$source = "HelloWorld!!!";
echo "Source: $source<br/>";
$fp = fopen ( "../ssl/pubkey.key", "r" );//读取公钥
$pub_key = fread ( $fp, 8192 );
fclose ( $fp );
openssl_get_publickey ( $pub_key );
echo $pub_key."<br/>";openssl_public_encrypt ( $source, $crypttext, $pub_key );
die();//无法执行到这个位置
echo "String crypted: $crypttext";$fp = fopen ( "../ssl/privatekey.key", "r" );
$priv_key = fread ( $fp, 8192 );
fclose ( $fp );
// $passphrase is required if your key is encoded (suggested)
$res = openssl_get_privatekey ( $priv_key, $passphrase );
/*
* NOTE: Here you use the returned resource value
*/
openssl_private_decrypt ( $crypttext, $newsource, $res );
echo "String decrypt : $newsource";
?> 结果如下所示(在IE中显示):
Internet Explorer 无法显示该网页您可以尝试以下操作:诊断连接问题 我用的是XAMPP1.7.1版本
至于说哪儿出了错,就需要你打开错误提示才能知道
在代码第一行加上一句 error_reporting(E_ALL | E_NOTICE);
————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
<?php
$rsa = openssl_pkey_new(array('private_key_bits' => 1024, 'encrypt_key' => false));
openssl_pkey_export($rsa, $priv);
file_put_contents('private.key', $priv);
$pub = openssl_pkey_get_details($rsa);
file_put_contents('public.key', $pub['key']);
?>
[User:root Time:08:38:44 Path:/home/liangdong/php/rsa]$ cat rsa.php
<?php
$context = "请加密我";
$pub = openssl_pkey_get_public(file_get_contents('public.key'));
$prv = openssl_pkey_get_private(file_get_contents('private.key'));
openssl_public_encrypt($context, $after, $pub);
echo "加密后:" . $after . PHP_EOL;
openssl_private_decrypt($after, $before, $prv);
echo "解密后:" . $before . PHP_EOL;
?>
[User:root Time:08:38:47 Path:/home/liangdong/php/rsa]$ cat public.key
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMyMvMIuBs/pG586//2dlid8l+
7sT4nq2vnN65wxMoOLgWurKZLiBCoZenSTV3l13sG8R8VgefviW/uMzZbx/dAzw+
a/iUyeyCKBrwRRzhRqj9CahgWZYFquPpYcmTqp4V3xrB88kk3HPkxmVSBoIz0RFf
jZUaxTlrk0k8A+V8iQIDAQAB
-----END PUBLIC KEY-----
[User:root Time:08:38:51 Path:/home/liangdong/php/rsa]$ cat private.key
-----BEGIN PRIVATE KEY-----
MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAMzIy8wi4Gz+kbnz
r//Z2WJ3yX7uxPiera+c3rnDEyg4uBa6spkuIEKhl6dJNXeXXewbxHxWB5++Jb+4
zNlvH90DPD5r+JTJ7IIoGvBFHOFGqP0JqGBZlgWq4+lhyZOqnhXfGsHzySTcc+TG
ZVIGgjPREV+NlRrFOWuTSTwD5XyJAgMBAAECgYEAjBmDc7EYoPi4ceNJsVw04Kza
6UAo+X51jQNhTO0smgPTzZkEvs9TusIaopPvRFYGJ5YHopiotpy77qJbYxYnUS9x
2qUHV5vOq5YqrlcwlobfZKxHgn7PrLITUmb7eoiTCzVpw1LX4U7UMW0CGltoS4z8
73wjngTbxoA7BP1MeAECQQDuHXAsLHtvgWhVlS98yVbgvSWY9rNBA+m5KRpeneIj
Gb6moglKsrmvypHwoZPtNpQe3JQXq/rmtkTrxS72RarJAkEA3Cp239cUsu2yT+rV
q1mbHoQn8uWeWgmDXwNjORUTDPpTvxnGucmK2/ahpRMzzSK/kl299OwaoupoqI7H
O7RjwQJBALTL010nFT4wEulQkjL8qSORWpfPUYHfF7rIk8YduROPu6vIQqfeFpF8
jN0ZwjkOBN99+lAS/DnrUV93Y9YIRckCQQCR/JZWVoejHXnfBBgqRoBU+8yBg0A8
85HorpZcg1zefh6J2M2s47bvo9oLW3A91YyxwPb0MJp47HX5TrNNI5ABAkBOqztR
luHDb7Jbj1HKvRM947cxTlbE3NcjtcMq9T1iDHtH39/mJHYvmnTXw7gFyyi/zfY3
SJScPdncfkbHv8fl
-----END PRIVATE KEY-----这是之前论坛上有人问时候我写的示例代码, 你对比一下吧.
这个问题的解决主要是对php.ini,http.conf,openssl.cnf三个配置文件的正确配置