php基于openssl的rsa加密解密示例


Posted in PHP onJuly 11, 2016

本文实例讲述了php基于openssl的rsa加密解密。分享给大家供大家参考,具体如下:

<?php
$config = array(
//"config" =>"D:/phpserver/Lighttpd/openssl.cnf",
//'config' =>'D:/phpStudy/Lighttpd/OpenSSL.cnf',
'private_key_bits' => 1024,  // Size of Key.
'private_key_type' => OPENSSL_KEYTYPE_RSA
);
//$res = openssl_pkey_new();
$res = openssl_pkey_new($config);
// Get private key
// openssl_pkey_export($res, $privkey, "PassPhrase number 1" );
openssl_pkey_export($res, $privkey);
var_dump($privkey);
// Get public key
$pubkey=openssl_pkey_get_details($res);
// echo "------------><br />";
// print_r($pubkey["rsa"]);
// $bin_str=$pubkey["rsa"]["n"];
// print_r($bin_str);
// echo "<br />";
// //echo $bin_hex_str = pack("H*" , bin2hex($bin_str));
// echo $bin_hex_str = bin2hex($bin_str);
// echo "<br />------------<<br />";
 $pubkey=$pubkey["key"];
// var_dump($privkey);
// var_dump($pubkey);
echo $privkey."<br /><br />";
echo $pubkey."<br /><br />";
?>
<?php
$private_key = '-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDNSQ4AmPZE01MpEO9dabRDsS0XwxKekEFUoWJneFG+NA6P52Js
ISw79QYNfQwM7akIaPpzU0+kkWjTSXiDqFUv5y2vaA3W2Tre5N51uCwUK6/LfzHX
Bg0d+Bnlzy6Kb6bpgPgvbhAkNbvjbCS0V9h4v3WUTLR9QauJ05Q8qe70sQIDAQAB
AoGAb/9aZ1MMkNImfbIilXk1AvVn353qy51yNyTxFfhbyISIKVSYqtuSUYfFbJh7
eZYz8UWs1jxuqB847IUZ/eJZzpVev480Tv9YejN0DhJ4Yw6y/kpJWo/9kEcET6Tk
vatXh+wgmieszkxe0kUvk41GPV7a4GWWQj6P4vjx+qktaNECQQDuo7ENW10dZXLG
YNKqUhgkdi9NPjRlHCgZ4RW0uoRqUsggqNVkaqpY8BaJOkkXWiQ0aVTPBiwo8k0+
S50rGNYNAkEA3DgxY9OwRc65VqS/UxV28pyLe2gy0XSVwA97SVNvYJJ58iNGEvYs
vEZ3GrTNAZpbPKcruCS6NiDK761Ot5A0NQJAOsRO1pY4QQP5lsbDOjRLQ7djAKef
6YJckbrvSHliIHjQVdKd8kOePZaqRhL3auvE3K9Ptkez2kWJJh0i0DkmhQJBAMCm
F+7wnWA0PEbj0MvqFyiechb/TJWXm/lskbnP17tv6GY/HWoxGWmLa15dlIo2cmJZ
DBIHby8y+NU7k4VaDZECQQCO018O5TJWl+O+bWyzV1eR603YP+JVjiSKUPtuyzVS
NIz+ClwspGmdUwPWlLqr5JfKm+OfpaLIepfJinsCgwpP
-----END RSA PRIVATE KEY-----';
//$private_key ='-----BEGIN RSA PRIVATE KEY-----
//MIICXAIBAAKBgQDVFOcE2nEBi+4FYvS36j1ShHHvusR0dXXe9NzAA/biH6NODywH
//cQo2Lyco6oSvY+cSsPewjjyatRCtq/Ri6c/am64CJu+HM1lZH1Gh05C2KVJ2dveX
//gcdsz+/XPHDxYKAq/hW9S1NeYr2x4eJdpYNYucLn8XWgeLRnlJUnBl/saQIDAQAB
//AoGAK2oz28hKKB+DorNT2zktv2de85JhPr1EA+ZuJ+1m2xHJKzlqJiYBB6M53ltS
//J446YZOPE/kXHgpwWIJlq9Wp1KiZPEfoRWzz1wmuj8koq95vcxBeuyjX4ez4Dio6
//Vmr9BABFuoAh0GAq8kTJOz0DURCEcwv+iI7ILaNoRjPFWuUCQQDveqRLE2/N8NIy
//P7YVnniAiaSL/e+XYQXCMIDsdEdqZNRjhjfDoBqpV/tGjnuAn9zBVHNNLbLni5nf
//2nqgrh5jAkEA48gQmBO9koOnvO//Q581JSBKfga4i7DetQ80OD4kYt6fwezkaeHX
//k64sjmpfD/Ys2heKFhyNDO/k0NsUxGlNwwJBAKPx7/u9qLLyBNSFrWALhy9oC5AT
//Hi0iLNEOZ5R43lNGB+jCf/aa6uW357wb2wzpZDWuXOkfOfUuKv+HEKBj00UCQCxd
//woWsiqcoB5rwcBrevr49fOTxMC7dQ3Omw3gU+odbb2iZWKAbAh9ctIcExwFX5MKS
//BS5rXzne3AWmNnRPQnsCQDdOCBxkF5YctHqlmEETfKodVZG69COZGykdlenOxK6g
//qNNAT2y2mxInYGlPIJ+TfxxFIqesHdph4s/lw6T2ISY=
//-----END RSA PRIVATE KEY-----';
$public_key = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNSQ4AmPZE01MpEO9dabRDsS0X
wxKekEFUoWJneFG+NA6P52JsISw79QYNfQwM7akIaPpzU0+kkWjTSXiDqFUv5y2v
aA3W2Tre5N51uCwUK6/LfzHXBg0d+Bnlzy6Kb6bpgPgvbhAkNbvjbCS0V9h4v3WU
TLR9QauJ05Q8qe70sQIDAQAB
-----END PUBLIC KEY-----';
//$private_key=$privkey;
//$public_key=$pubkey;
$fp=fopen("private_key","w");
fwrite($fp,$private_key);
fclose($fp);
$fp=fopen("public_key","w");
fwrite($fp,$public_key);
fclose($fp);
//echo $private_key;
$pi_key = openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
$pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的
print_r($pi_key);echo "\n";
print_r($pu_key);echo "\n";
echo "<br />----------------------<br />";
$data = "woshizhu";//原始数据
$encrypted = ""; 
$decrypted = "";
echo "source data:",$data,"<br />";
echo "private key encrypt:\n";
openssl_private_encrypt($data,$encrypted,$pi_key);//私钥加密
$encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
echo "<br />----------私钥加密------------<br />";
echo $encrypted,"<br />";
echo "<br />----------私钥加密------------<br />";
echo "public key decrypt:\n";
$decrypted="";
openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私钥加密的内容通过公钥可用解密出来
echo $decrypted,"\n";
echo "---------------------------------------\n";
echo "public key encrypt:\n";
openssl_public_encrypt($data,$encrypted,$pu_key);//公钥加密
$encrypted = base64_encode($encrypted);
echo $encrypted,"\n";
$decrypted="";
//$encrypted="JBeapcp9iWWYJYElgqtrZxfxM4wVkCaSn/oJZ7NjfR23o76fdbxEXpf+PGWACw3PeTdObwL4108wR3ihKmy2iYkIExGjBYyvx2w9aHies8ZsOIP3LjiMHYTm93Rr8Sc5XxHWQc3Dhbq16JWHYZ2d+RrOpHd4x84GF3JXwivrGO4=";
echo "private key decrypt:\n";
openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//私钥解密
echo "--->:".$decrypted,"\n";
?>

PHP 相关文章推荐
计数器详细设计
Oct 09 PHP
php代码把全角数字转为半角数字
Dec 10 PHP
php下将图片以二进制存入mysql数据库中并显示的实现代码
May 27 PHP
PHP生成不同颜色、不同大小的tag标签函数
Sep 23 PHP
php上传图片到指定位置路径保存到数据库的具体实现
Dec 30 PHP
你可能不知道PHP get_meta_tags()函数
May 12 PHP
php中常见的sql攻击正则表达式汇总
Nov 06 PHP
PHP版本如何选择?应该使用哪个版本?
May 13 PHP
php根据日期显示所在星座的方法
Jul 13 PHP
PHP使用socket发送HTTP请求的方法
Feb 14 PHP
Mac系统完美安装PHP7详细教程
Jun 06 PHP
如何用PHP websocket实现网页实时聊天
May 26 PHP
PHP微信开发用Cache 解决数据缓存
Jul 11 #PHP
php使用escapeshellarg时中文被过滤的解决方法
Jul 10 #PHP
[原创]smarty简单模板变量输出方法
Jul 09 #PHP
[原创]php简单防盗链验证实现方法
Jul 09 #PHP
[原创]php简单隔行变色功能实现代码
Jul 09 #PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
Jul 09 #PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
Jul 09 #PHP
You might like
模拟xcopy的函数
2006/10/09 PHP
PHP中SESSION的注销与清除
2015/04/16 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
Redis在Laravel项目中的应用实例详解
2017/08/11 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
用于table内容排序
2006/07/21 Javascript
Javascript 继承机制的实现
2009/08/12 Javascript
jQuery中:selected选择器用法实例
2015/01/04 Javascript
jquery实现相册一下滑动两次的方法
2015/02/09 Javascript
node.js调用C++开发的模块实例
2015/07/03 Javascript
Bootstrap优化站点资源、响应式图片、传送带使用详解3
2016/10/14 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
手机注册发送验证码倒计时的简单实例
2017/11/15 Javascript
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
JS实现移动端触屏拖拽功能
2018/07/31 Javascript
nodejs实现用户登录路由功能
2019/05/22 NodeJs
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
python多进程操作实例
2014/11/21 Python
Python实现的RSS阅读器实例
2015/07/25 Python
和孩子一起学习python之变量命名规则
2018/05/27 Python
对Python通过pypyodbc访问Access数据库的方法详解
2018/10/27 Python
解析Python的缩进规则的使用
2019/01/16 Python
分析经典Python开发工程师面试题
2019/04/08 Python
python如何求圆的面积
2020/07/01 Python
美国在线宠物用品商店:Entirely Pets
2017/01/01 全球购物
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
领导视察欢迎词
2014/01/15 职场文书
优秀员工推荐信
2014/05/10 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
交警作风整顿剖析材料
2014/10/11 职场文书
会计主管岗位职责
2015/04/02 职场文书
党员干部公开承诺书范文
2015/04/27 职场文书
春晚观后感
2015/06/11 职场文书
Go Grpc Gateway兼容HTTP协议文档自动生成网关
2022/06/16 Golang