针对windows系统如何解决openssl_pkey_export(): cannot get key from parameter 1这个问题
2021-01-24 21:14
标签:splay 方法 tin 私钥 family dump 论坛 环境 http 为了解决这个问题我百度了很多方法,可是很多方法并没有效果。 如果你安装的是phpstudy这个集成环境,那么 1、你就要去php拓展里面去打开php_opemssl中打开这个扩展。 2、去php.ini里面设置,把“extension=php_openssl.dll”前面的“;”去掉,如果没有这个就添加extension=php_openssl.dll这个。 3、复制php安装目录中的: libeay32.dll、ssleay32.dll至c:\windows\system32(如果是apache这两个文件在E:\phpStudy\PHPTutorial\php\php-7.0.12-nts)。 4、复制php_openssl.dll至c:\windows\system32(如果是apache,那么这个文件在E:\phpStudy\PHPTutorial\php\php-7.0.12-nts\ext)。 5、重启IIS或者apache环境 如果方法一还是没有用,那么你可以在环境变量中去添加一个变量试试看, This may help if you are on windows: The OPENSSL should be correctly working. 这个意思是设置一个环境变量,将openssl.cnf的路径放到环境变量中,这个我是在国外的论坛看到的方法,但是效果也不好。 代码为 结果为 但是这个方法不是很理想,因为每次生成公钥和私钥都要调用$configs[‘config‘] = ‘E:\phpStudy\PHPTutorial\Apache\conf\openssl.cnf‘;,是不是有点麻烦呀,哈哈哈,好了,给你最后一个方法,个人觉得这个方法倒是挺好的 首先在phpinfo中找到如下图所示 创建对应的路径,将apache中的openssl.cnf复制进去,然后就可以尝试测试结果了 测试方法: 针对windows系统如何解决openssl_pkey_export(): cannot get key from parameter 1这个问题 标签:splay 方法 tin 私钥 family dump 论坛 环境 http 原文地址:https://www.cnblogs.com/wadhf/p/12041267.html方法一:
方法二:
1 php
2
3 $configs[‘config‘] = ‘E:\phpStudy\PHPTutorial\Apache\conf\openssl.cnf‘;
4
5 $config = array(
6 //"digest_alg" => "sha512",
7 "private_key_bits" => 512, //字节数 512 1024 2048 4096 等
8 "private_key_type" => OPENSSL_KEYTYPE_RSA, //加密类型
9 );
10
11 //创建公钥和私钥 返回资源
12 $res = openssl_pkey_new($config+$configs);
13
14 //从得到的资源中获取私钥 并把私钥赋给$privKey
15 openssl_pkey_export($res, $privKey, null, $config);
16
17 //从得到的资源中获取公钥 返回公钥 $pubKey
18 $pubKey = openssl_pkey_get_details($res);
19
20 $pubKey = $pubKey["key"];
21 //var_dump($privKey);
22 //var_dump($pubKey);
23 var_dump(array(‘privKey‘=>$privKey,‘pubKey‘=>$pubKey));
24 die;
array(2) { ["privKey"]=> NULL ["pubKey"]=> string(182) "-----BEGIN PUBLIC KEY----- MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAPSkEAT0A8zZKBjWSph22wn2m3mI947X 7wbMDnAju94LMTZ4uVSqjVMvSMGC35OcmHQr3c5HUFalJCmyYXU3IEkCAwEAAQ== -----END PUBLIC KEY----- " }
方法三:
1 php
2
3 $config = array(
4 "digest_alg" => "sha512",
5 "private_key_bits" => 4096, //字节数 512 1024 2048 4096 等 ,不能加引号,此处长度与加密的字符串长度有关系,可以自己测试一下
6 "private_key_type" => OPENSSL_KEYTYPE_RSA, //加密类型
7 );
8 $res = openssl_pkey_new($config);
9
10 //提取私钥
11 openssl_pkey_export($res, $private_key);
12
13 //生成公钥
14 $public_key = openssl_pkey_get_details($res);
15 // var_dump($public_key);
16
17 $public_key=$public_key["key"];
18
19 //显示数据
20 var_dump($private_key); //私钥
21 echo "
";
22 var_dump($public_key); //公钥
23 echo "
";
24 //要加密的数据
25 $data = "http://www.cnblogs.com/wt645631686/";
26 echo ‘加密的数据:‘.$data."\r\n";
27 echo "
";
28 //私钥加密后的数据
29 openssl_private_encrypt($data,$encrypted,$private_key);
30
31 //加密后的内容通常含有特殊字符,需要base64编码转换下
32 $encrypted = base64_encode($encrypted);
33 echo "私钥加密后的数据:".$encrypted."\r\n";
34 echo "
";
35 //公钥解密
36 openssl_public_decrypt(base64_decode($encrypted), $decrypted, $public_key);
37 echo "公钥解密后的数据:".$decrypted,"\r\n";
38 echo "
";
39 //----相反操作。公钥加密
40 openssl_public_encrypt($data, $encrypted, $public_key);
41 $encrypted = base64_encode($encrypted);
42 echo "公钥加密后的数据:".$encrypted."\r\n";
43 echo "
";
44 openssl_private_decrypt(base64_decode($encrypted), $decrypted, $private_key);//私钥解密
45 echo "私钥解密后的数据:".$decrypted."n";
46
47 echo "
";
48
49 echo "---------------------------------------分割线---------------------------------------";
50
51 echo "
";
上一篇:浅析API和SDK
文章标题:针对windows系统如何解决openssl_pkey_export(): cannot get key from parameter 1这个问题
文章链接:http://soscw.com/essay/46494.html