为了解决这个问题我百度了很多方法,可是很多方法并没有效果。

方法一:

如果你安装的是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环境

如果方法一还是没有用,那么你可以在环境变量中去添加一个变量试试看,

  1. This may help if you are on windows:

  2. Click on the START button
  3. Click on CONTROL PANEL
  4. Click on SYSTEM AND SECURITY
  5. Click on SYSTEM
  6. Click on ADVANCED SYSTEM SETTINGS
  7. Click on ENVIRONMENT VARIABLES
  8. Under "System Variables" click on "NEW"
  9. Enter the "Variable name" OPENSSL_CONF
  10. Enter the "Variable value". My is - C:\wamp\bin\apache\Apache2.2.17\conf\openssl.cnf
  11. Click "OK" and close all the windows and RESTART your computer.
  12. The OPENSSL should be correctly working.

这个意思是设置一个环境变量,将openssl.cnf的路径放到环境变量中,这个我是在国外的论坛看到的方法,但是效果也不好。

方法二:

代码为

  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. //从得到的资源中获取私钥 并把私钥赋给$<span style="font-family: Arial, Helvetica, sans-serif;">privKey</span>
  15. openssl_pkey_export($res, $privKey, null, $config);
  16.  
  17. //<span style="font-family: Arial, Helvetica, sans-serif;">从得到的资源中获取公钥 返回公钥 </span><span style="font-family: Arial, Helvetica, sans-serif;">$pubKey</span><span style="font-family: Arial, Helvetica, sans-serif;">
  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;

结果为

  1. array(2) { ["privKey"]=> NULL ["pubKey"]=> string(182) "-----BEGIN PUBLIC KEY----- MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAPSkEAT0A8zZKBjWSph22wn2m3mI947X 7wbMDnAju94LMTZ4uVSqjVMvSMGC35OcmHQr3c5HUFalJCmyYXU3IEkCAwEAAQ== -----END PUBLIC KEY----- " }

但是这个方法不是很理想,因为每次生成公钥和私钥都要调用$configs['config'] = 'E:\phpStudy\PHPTutorial\Apache\conf\openssl.cnf';,是不是有点麻烦呀,哈哈哈,好了,给你最后一个方法,个人觉得这个方法倒是挺好的

方法三:

首先在phpinfo中找到如下图所示

创建对应的路径,将apache中的openssl.cnf复制进去,然后就可以尝试测试结果了

测试方法:

  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 "<br/>";
  22. var_dump($public_key); //公钥
  23. echo "<br/>";
  24. //要加密的数据
  25. $data = "http://www.cnblogs.com/wt645631686/";
  26. echo '加密的数据:'.$data."\r\n";
  27. echo "<br/>";
  28. //私钥加密后的数据
  29. openssl_private_encrypt($data,$encrypted,$private_key);
  30.  
  31. //加密后的内容通常含有特殊字符,需要base64编码转换下
  32. $encrypted = base64_encode($encrypted);
  33. echo "私钥加密后的数据:".$encrypted."\r\n";
  34. echo "<br/>";
  35. //公钥解密
  36. openssl_public_decrypt(base64_decode($encrypted), $decrypted, $public_key);
  37. echo "公钥解密后的数据:".$decrypted,"\r\n";
  38. echo "<br/>";
  39. //----相反操作。公钥加密
  40. openssl_public_encrypt($data, $encrypted, $public_key);
  41. $encrypted = base64_encode($encrypted);
  42. echo "公钥加密后的数据:".$encrypted."\r\n";
  43. echo "<br/>";
  44. openssl_private_decrypt(base64_decode($encrypted), $decrypted, $private_key);//私钥解密
  45. echo "私钥解密后的数据:".$decrypted."n";
  46.  
  47. echo "<br/>";
  48.  
  49. echo "---------------------------------------分割线---------------------------------------";
  50.  
  51. echo "<br/>";

针对windows系统如何解决openssl_pkey_export(): cannot get key from parameter 1这个问题的更多相关文章

  1. Python3.6(windows系统)解决编码问题

    Python3.6(windows系统)解决编码问题 1,py文件代码: import urllib.request url = "http://www.douban.com/" ...

  2. Windows系统下解决“telnet不是外部或内部命令”的问题

    在学习Node.js时,需要使用Telnet连接Node TCP服务器,在命令行中运行: $ telnet 127.0.0.1 9000 时,命令行工具会报错:“telnet不是外部或内部命令”. 这 ...

  3. 双系统删除Ubuntu后出现grub界面而无法正常启动Windows系统的解决方法

    第一次安装双系统的时候由于不怎么会弄,设置了ubuntu引导windows,这种方法是非常不推荐的,因为当ubuntu出现问题或者是当你不再使用ubuntu的时候,删除ubuntu就会成为一个很麻烦的 ...

  4. 忘记mysql密码的解决办法--针对windows系统

    C:\Users\Administrator>cd C:\Program Files\MySQL\MySQL Server 5.5\bin C:\Program Files\MySQL\MySQ ...

  5. Windows系统下解决PhPStudy MySQL启动失败

    报错 Apache\Nginx服务正常启动了,但是MySQL却一直启动失败. 解决流程 查看端口是否被占用 打开系统自带的资源管理器,查看监听端口3306是不是被占用,下图中3306端口被mysqld ...

  6. 收集入侵Windows系统的证据

    随着网络的不断扩大,网络安全更加会成为人们的一个焦点,同时也成为是否能进一步投入到更深更广领域的一个基石.当然网络的安全也是一个动态的概念,世界上没有绝对安全的网络,只有相对安全的网络.相对安全环境的 ...

  7. MongoDB的安装和配置(Windows系统)及遇到的常见问题解答

    目前比较流行的数据库大致可以分为三种: 前两种是按照图论理论建立起来的,分别是: 层次式数据库(IMS(Information Management System)是其典型代表)和 网络式数据库(DB ...

  8. 启用“关闭自动根证书更新”,解决Windows系统各种卡顿的问题(Visual studio 卡、远程桌面mstsc卡、SVN卡)

    最近,发现在Win7下面一系列操作都会出现卡顿的情况: 1.  Visual studio 启动调试和关闭调试时,都会卡上半分钟左右 2.  使用远程桌面mstsc.exe,点击连接时,也会卡上半分钟 ...

  9. 解决Tomcat6解压版在64位windows系统上无法启动服务的问题

    解决Tomcat6解压版在64位windows系统上无法启动服务的问题         由于客户环境为64位windows系统,开发环境一直用32位.tomcat使用6.0.20非安装版.部署时发现在 ...

随机推荐

  1. “洞察千里”,华为云HiLens如何让无人车智行天下

    作者:华为云 Rosie 随着人工智能的普及和渗透,"无人"的场景越来越丰富,无人超市.无人车.无人机等已经融入我们的生活. 乘着这股热浪,华为云携手上海交通大学学生创新中心举办了 ...

  2. tensorflow SavedModelBuilder用法

    训练代码: # coding: utf-8 from __future__ import print_function from __future__ import division import t ...

  3. DWVA-关于SQL注入的漏洞详解

    low等级 代码如下: <?php if( isset( $_REQUEST[ 'Submit' ] ) ) { // Get input $id = $_REQUEST[ 'id' ]; // ...

  4. 【React】282- 在 React 组件中使用 Refs 指南

    英文:Yomi Eluwande  译文:joking_zhang https://segmentfault.com/a/1190000019277029 使用 React 时,我们的默认思维方式应该 ...

  5. 带你使用Visual Studio 2019创建一个MVC Web应用

    工欲善其事必先利其器,我们既然有Visual Studio2019这样的IDE为什么不用?学.Net Core而不用Visual Studio进行开发可谓是多么另类呀!既然你已经安装了VS2019的话 ...

  6. AQS系列(六)- Semaphore的使用及原理

    前言 Semaphore也是JUC包中一个用于并发控制的工具类,举个常用场景的例子:有三台电脑五个人,每个人都要用电脑注册一个自己的账户,这时最开始只能同时有三个人操作电脑注册账户,这三个人中有人操作 ...

  7. VS2019 开发Django(十一)------表单

    导航:VS2019开发Django系列 今天是中华人民共和国成立70周年的日子,普天同庆,看阅兵看得满腔热血,热泪盈眶,祖国都这么优秀了,我要更加努力才行啊! 这个Django系列的文章,没有很深入的 ...

  8. CentOS7 安装 Redis 并设置开机启动

    1.下载 https://redis.io/download cd /usr/local/src wget -c http://download.redis.io/releases/redis-3.2 ...

  9. 红帽杯-MISC-Advertising for Marriage

    convert -flip screenshot.png screensho1.png 本篇结合我上一博客https://www.cnblogs.com/qq3285862072/p/11869403 ...

  10. python 正则表达式re使用模块(match()、search()和compile())

    摘录 python核心编程 python的re模块允许多线程共享一个已编译的正则表达式对象,也支持命名子组.下表是常见的正则表达式属性: 函数/方法 描述 仅仅是re模块函数 compile(patt ...