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 相关文章推荐
第二节--PHP5 的对象模型
Nov 16 PHP
用php+javascript实现二级级联菜单的制作
May 06 PHP
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
Nov 27 PHP
PHP 获取远程文件内容的函数代码
Mar 24 PHP
PHP实现多条件查询实例代码
Jul 17 PHP
PHP及Zend Engine的线程安全模型分析
Nov 10 PHP
PHP 图片水印类代码
Aug 27 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
Sep 30 PHP
使用PHP导出Word文档的原理和实例
Oct 21 PHP
PHP实现的博客欢迎提示功能(很特别哦)
Jun 05 PHP
PHP数据库连接mysql与mysqli对比分析
Jan 04 PHP
Laravel 关联模型-关联新增和关联更新的方法
Oct 10 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
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
php 将bmp图片转为jpg等其他任意格式的图片
2009/06/29 PHP
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
CI框架文件上传类及图像处理类用法分析
2016/05/18 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
一行代码告别document.getElementById
2012/06/01 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
jQuery的内容过滤选择器学习教程
2016/04/18 Javascript
jquery显示隐藏元素的实现代码
2016/05/19 Javascript
Mvc提交表单的四种方法全程详解
2016/08/10 Javascript
jquery获取链接地址和跳转详解(推荐)
2017/08/15 jQuery
老生常谈JavaScript面向对象基础与this指向问题
2017/10/16 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
[01:44]剑指西雅图 展望TI之CIS战队专访
2014/06/25 DOTA
python利用beautifulSoup实现爬虫
2014/09/29 Python
Python fileinput模块使用实例
2015/05/28 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
Python计算两个日期相差天数的方法示例
2017/05/23 Python
Python实现控制台中的进度条功能代码
2017/12/22 Python
Python实现合并excel表格的方法分析
2019/04/13 Python
Win10下python 2.7与python 3.7双环境安装教程图解
2019/10/12 Python
环法自行车赛官方商店:Le Tour de France
2017/08/27 全球购物
英国女性时尚品牌:Apricot
2018/12/04 全球购物
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
毕业设计说明书
2014/05/07 职场文书
新文化运动的口号
2014/06/21 职场文书
设计师求职信
2014/07/01 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
搞笑的爱情检讨书
2014/10/01 职场文书
山东省召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang
pandas中DataFrame重置索引的几种方法
2021/05/24 Python
你知道Java Spring的两种事务吗
2022/03/16 Java/Android