多数大学生出来选择的工作和专业无关
首页 > 专业知识

PHP中mcrypt_module_open()替换方案

时间:2017-12-25 14:59:31 [来源]:郑州PHP培训学校

 在PHP 7.1中还能在PHP安装包中找到和使用mycrypt扩展,在PHP 7.2中会被移除,不过我们依然可以从PECL下载到源码,编译和安装这个扩展。不过最好还是遵循PHP的建议,通过OpenSSL逐渐取代mcrypt所扮演的角色。

PHP的OpenSSL模块要加载上很容易,百度一下,按着做就可以,但是这里面其实有很多问题,首先一点就是windows环境的问题,OpenSSL开发是以linux环境为基础的,现在开发者的windows下lamp集成环境会出现很多错误,如果你去OpenSSL官网可以看到它提供了专门的windows环境OpenSSL安装包.遗憾的是,没有提供给你PHP调用的解决办法,所以转了一圈我们又回到PHP自带的php_openssl.dll下了,你会发现在生成证书,提取公钥等等地方都会出现错误.我的解决办法是,在Apache的bin目录下用命令行来生成各种证书密钥,在PHP中只需要提取密钥做验证工作或者加密工作就可以了,密钥你只生成一次嘛,那个项目也不会需要你不停的变密钥对是吧.但是你要注意的是即使在Apache下使用命令行,你也需要一个特殊的openssl.cnf,这个可以用于windows环境,你可以百度一下,做了这些工作以后,你可以跟着我来生成各种密钥了,假设你在apache/bin目录下,所需要的exr,cnf,dll文件都拷贝到这个目录下了,然后你打开dos命令行,进入这个目录,做以下工作:  
  
生成rsa密钥  
openssl genrsa -des3 -out prikey.pem  
去除掉密钥文件保护密码  
openssl rsa -in prikey.pem -out prikey.pem  
分离出公钥  
openssl rsa -in prikey.pem -pubout -out pubkey.pem(获取证书中的公钥 openssl req -in myreq.pem  -out -pubkey.pem)  
对文件进行签名  
open rsautl -sign -inkey prikey.pem -in a.txt -out sig.dat  
验证签名  
openssl rsautl -verify -inkey prikey.pem -in sig.dat  
用公钥对文件加密  
openssl rsautl -encrypt -pubin -inkey pubkey.pem -in a.text -out b.text  
用私钥解密  
openssl rsautl -decrypt -inkey prikey.pem -in b.text  
用证书中的公钥加密   
opensll rsautl -encrypt -certin -inkey cert1.pem -in a.txt  
 
 生成一个没有加密的ca私钥  
openssl genrsa -out ca.key.pem 1024  
生成ca对应的csr文件  
openssl req -new -key ca.key.pem -out ca.csr  
自签名  
openssl x509 -in ca.csr -out ca.cer -req -signkey ca.key.pem -days 7300 -extensions v3_ca  
生成DER格式的私钥  
openssl pkcs8 -topk8 -inform PEM -outform DER -in ca.key.pem -out ca.private.der -nocrypt  
读取证书的内容,显示在屏幕上  
openssl x509 -in server.cer -noout -subject  -nameopt RFC2253  
将der格式的证书转成pem格式  
openssl  x509  -inform PEM  -outform DER -in server.der -out server.pem  
  
 如果那个命令提示你需要config文件,你在命令行的最后添加-config C:\wamp\bin\apache\apache2.2.8\conf\openssl.cnf,路径是你openssl.cnf的路径,根据你的cnf在哪里放设置。
  

上一篇:php怎么添加openssl扩展

下一篇:php页面漏洞分析及相关问题解决