摘要:php 利用openssl加密解密
参考了别人的文章,自己做了笔记
①准备工作
找到php.ini 去掉openssl.dll前面的';'。
找到openssl.cnf的位置,我的在d:\xampp\apache\conf。
配置apache以支持ssl:打开apache的配置文件conf/httpd.conf
loadmodule ssl_module modules/mod_ssl.so、include conf/extra/httpd-ssl.conf
去掉两行前面的#
注意修改httpd-ssl.conf 文件里的两个字段:
sslcertificatefile c:/apache2.2/conf/server.crt
sslcertificatekeyfile c:/apache2.2/conf/server.key
② 代码
<?php
$config = array( "private_key_bits" => 1024, //字节数 512 1024 2048 4096 等
private_key_type => openssl_keytype_rsa, //加密类型
config => d:/xampp/apache/conf/openssl.cnf);
$privkeypass = '123456789'; //私钥密码
$numberofdays = 365; //有效时长
$cerpath = ./test.cer; //生成证书路径
$pfxpath = ./test.pfx; //密钥文件路径
$dn = array( countryname => uk, stateorprovincename => somerset, localityname => glastonbury, organizationname => the brain room limited, organizationalunitname => php documentation team, commonname => wez furlong, emailaddress => wez@example.com);// 生成公钥私钥资源$res = openssl_pkey_new($config);// 导出私钥
$prikeyopenssl_pkey_export($res, $prikey,null,$config);// 导出公钥
$pubkey$pubkey = openssl_pkey_get_details($res);
$pubkey = $pubkey[key];
//print_r($prikey); 私钥
//print_r($pubkey); 公钥
//直接测试私钥 公钥
$data = '直接测试成功!';// 加密
openssl_public_encrypt($data, $encrypted, $pubkey);// 解密
openssl_private_decrypt($encrypted, $decrypted, $prikey);
echo $decrypted;//生成文件
$csr = openssl_csr_new($dn, $prikey,$config); //基于$dn生成新的 csr (证书签名请求)
$sscert = openssl_csr_sign($csr, null, $prikey, 365,$config);//根据配置对证书进行签名
openssl_x509_export($sscert, $csrkey); //将公钥 证书存储到一个文件$sscert,由 pem 编码格式命名。
openssl_pkcs12_export($sscert, $privatekey, $prikey, $privkeypass); //将私钥存储到名为的出 pkcs12 文件格式的字符串。 导出密钥$privatekey//生成证书文件$fp = fopen($cerpath, w);
fwrite($fp, $csrkey);
fclose($fp);//生成密钥文件$fp = fopen($pfxpath, w);
fwrite($fp, $privatekey);
fclose($fp);// 测试私钥 秘钥
$privkeypass = '123456789'; //私钥密码
$pfxpath = ./test.pfx; //密钥文件路径
$priv_key = file_get_contents($pfxpath); //获取密钥文件内容
$data = 测试数据!;
//加密数据测试test
//私钥加密
openssl_pkcs12_read($priv_key, $certs, $privkeypass); //读取公钥、私钥
$prikeyid = $certs['pkey']; //私钥
openssl_sign($data, $signmsg, $prikeyid,openssl_algo_sha1); //注册生成加密信息
$signmsg = base64_encode($signmsg); //base64转码加密信息
//公钥解密
$unsignmsg=base64_decode($signmsg);//base64解码加密信息
openssl_pkcs12_read($priv_key, $certs, $privkeypass); //读取公钥、私钥
$pubkeyid = $certs['cert']; //公钥
$res = openssl_verify($data, $unsignmsg, $pubkeyid); //验证
echo $res?'证书测试成功!':'证书测试失败!';; //输出验证结果,1:验证成功,0:验证失败
以上就是有关php如何利用openssl加密解密实例详解的详细内容。