php 生成加密公钥加密私钥实例详解


Posted in PHP onJune 16, 2017

php 生成加密公钥加密私钥实例详解

生成公钥私钥     win下必须要openssl.cof支持   liunx一般已自带安装 

$config = array( 
  //"digest_alg" => "sha512", 
  "private_key_bits" => 512,           //字节数  512 1024 2048  4096 等 
  "private_key_type" => OPENSSL_KEYTYPE_RSA,   //加密类型 
); 
   
//1.创建公钥和私钥  返回资源 
$res = openssl_pkey_new($config); 
 
//从得到的资源中获取私钥  并把私钥赋给$privKey
openssl_pkey_export($res, $privKey); 
 
//从得到的资源中获取私钥  并把私钥赋给$pubKey
$pubKey = openssl_pkey_get_details($res); 
 
$pubKey = $pubKey["key"]; 
var_dump(array('privKey'=>$privKey,'pubKey'=>$pubKey)); 
die; 

//2.加密解密数据 要加密的数据 
$data = 'plaintext data goes here';             

//对$data进行加密 要加密的数据字符串 得到加密后的数据 加密所需要的公钥
openssl_public_encrypt($data, $encrypted, $pubKey); 
echo base64_encode($encrypted); 
 
//对加密后的数据进行解密 解密的数据 得到解密后的数据 解密所需要的私钥
$decrypted = base64_decode($encrypted);
openssl_private_decrypt($encrypted, $decrypted, $privKey); 
echo $decrypted;  

//3.一个加密解密类 
class rsa { 
  private $public_key = ''; //公密钥 
  private $private_key = ''; //私密钥 
  private $public_key_resource = ''; //公密钥资源 
  private $private_key_resource = ''; //私密钥资源 
  /** 
   * 架构函数 
   * @param [string] $public_key_file [公密钥文件地址] 
   * @param [string] $private_key_file [私密钥文件地址] 
   */ 
  public function __construct($public_key,$private_key) { 
    $this->public_key = $public_key;   
 $this->private_key = $private_key;
 
 if(false == ($this->public_key_resource = $this->is_bad_public_key($this->public_key)) || false == ($this->private_key_resource = $this->is_bad_private_key($this->private_key))) { 
  throw new Exception('public key or private key no usable'); 
 } 
  } 
  private function is_bad_public_key($public_key) { 
    return openssl_pkey_get_public($public_key); 
  } 
  private function is_bad_private_key($private_key) { 
    return openssl_pkey_get_private($private_key); 
  } 
  /** 
   * 生成一对公私密钥 成功返回 公私密钥数组 失败 返回 false 
   */ 
  public function create_key() { 
    $res = openssl_pkey_new(); 
    if($res == false) return false; 
    openssl_pkey_export($res, $private_key); 
    $public_key = openssl_pkey_get_details($res); 
    return array('public_key'=>$public_key["key"],'private_key'=>$private_key); 
  } 
  /** 
   * 用私密钥加密 
   */ 
  public function private_encrypt($input) { 
    openssl_private_encrypt($input,$output,$this->private_key_resource); 
    return base64_encode($output); 
  } 
  /** 
   * 解密 私密钥加密后的密文 
   */ 
  public function public_decrypt($input) { 
    openssl_public_decrypt(base64_decode($input),$output,$this->public_key_resource); 
    return $output; 
  } 
  /** 
   * 用公密钥加密 
   */ 
  public function public_encrypt($input) { 
    openssl_public_encrypt($input,$output,$this->public_key_resource); 
    return base64_encode($output); 
  } 
  /** 
   * 解密 公密钥加密后的密文 
   */ 
  public function private_decrypt($input) { 
    openssl_private_decrypt(base64_decode($input),$output,$this->private_key_resource); 
    return $output; 
  } 
} 

$private_key = '-----BEGIN RSA PRIVATE KEY----- 
MIICXQIBAAKBgQC3//sR2tXw0wrC2DySx8vNGlqt3Y7ldU9+LBLI6e1KS5lfc5jl 
TGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2klBd6h4wrbbHA2XE1sq21ykja/ 
Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o2n1vP1D+tD3amHsK7QIDAQAB 
AoGBAKH14bMitESqD4PYwODWmy7rrrvyFPEnJJTECLjvKB7IkrVxVDkp1XiJnGKH 
2h5syHQ5qslPSGYJ1M/XkDnGINwaLVHVD3BoKKgKg1bZn7ao5pXT+herqxaVwWs6 
ga63yVSIC8jcODxiuvxJnUMQRLaqoF6aUb/2VWc2T5MDmxLhAkEA3pwGpvXgLiWL 
3h7QLYZLrLrbFRuRN4CYl4UYaAKokkAvZly04Glle8ycgOc2DzL4eiL4l/+x/gaq 
deJU/cHLRQJBANOZY0mEoVkwhU4bScSdnfM6usQowYBEwHYYh/OTv1a3SqcCE1f+ 
qbAclCqeNiHajCcDmgYJ53LfIgyv0wCS54kCQAXaPkaHclRkQlAdqUV5IWYyJ25f 
oiq+Y8SgCCs73qixrU1YpJy9yKA/meG9smsl4Oh9IOIGI+zUygh9YdSmEq0CQQC2 
4G3IP2G3lNDRdZIm5NZ7PfnmyRabxk/UgVUWdk47IwTZHFkdhxKfC8QepUhBsAHL 
QjifGXY4eJKUBm3FpDGJAkAFwUxYssiJjvrHwnHFbg0rFkvvY63OSmnRxiL4X6EY 
yI9lblCsyfpl25l7l5zmJrAHn45zAiOoBrWqpM5edu7c 
-----END RSA PRIVATE KEY-----';

$public_key = '-----BEGIN PUBLIC KEY----- 
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3//sR2tXw0wrC2DySx8vNGlqt 
3Y7ldU9+LBLI6e1KS5lfc5jlTGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2kl 
Bd6h4wrbbHA2XE1sq21ykja/Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o 
2n1vP1D+tD3amHsK7QIDAQAB 
-----END PUBLIC KEY-----';

$rsa = new rsa($public_key,$private_key);  
$str = '加密解密'; 
$str = $rsa->public_encrypt($str); //用公密钥加密 
echo $str,'</br>'; 
$str = $rsa->private_decrypt($str); //用私密钥解密 
echo $str,'</br>'; 
//============================================================= 
$str = $rsa->private_encrypt($str); //用私密钥加密 
echo $str,'</br>'; 
$str = $rsa->public_decrypt($str); //用公密钥解密 
echo $str,'</br>';

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
dede3.1分页文字采集过滤规则详说(图文教程)
Apr 03 PHP
PHP 文件上传功能实现代码
Jun 24 PHP
php cout&amp;lt;&amp;lt;的一点看法
Jan 24 PHP
使用PHP提取视频网站页面中的FLASH地址的代码
Apr 17 PHP
通过PHP修改Linux或Unix口令的方法分享
Jan 30 PHP
解析thinkphp中的M()与D()方法的区别
Jun 22 PHP
thinkphp获取栏目和文章当前位置的方法
Oct 29 PHP
Yii把CGridView文本框换成下拉框的方法
Dec 03 PHP
PHP超全局数组(Superglobals)介绍
Jul 01 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
Jun 20 PHP
使用laravel和ECharts实现折线图效果的例子
Oct 09 PHP
thinkphp5实现微信扫码支付
Dec 23 PHP
详解yii2使用多个数据库的案例
Jun 16 #PHP
详解Yii2.0使用AR联表查询实例
Jun 16 #PHP
详解Yii2 之 生成 URL 的方法
Jun 16 #PHP
PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面)
Jun 16 #PHP
php使用str_replace替换多维数组的实现方法分析
Jun 15 #PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
Jun 15 #PHP
php7基于递归实现删除空文件夹的方法示例
Jun 15 #PHP
You might like
MySQL时间字段究竟使用INT还是DateTime的说明
2012/02/27 PHP
基于php设计模式中单例模式的应用分析
2013/05/15 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
php 生成加密公钥加密私钥实例详解
2017/06/16 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
tp5框架使用cookie加密算法实现登录功能示例
2020/02/10 PHP
HTML5如何适配 iPhone IOS 底部黑条
2021/03/09 HTML / CSS
JavaScript和CSS通过expression实现Table居中显示
2013/06/28 Javascript
用js的document.write输出的广告无阻塞加载的方法
2014/06/05 Javascript
jQuery实现无限往下滚动效果代码
2016/04/16 Javascript
微信小程序自定义音乐进度条的实例代码
2018/08/28 Javascript
web页面和微信小程序页面实现瀑布流效果
2018/09/26 Javascript
Echarts实现多条折线可拖拽效果
2019/12/19 Javascript
vue与iframe之间的信息交互的实现
2020/04/08 Javascript
vue 授权获取微信openId操作
2020/11/13 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
[01:55]《走出家门看比赛》——DOTA2 2015国际邀请赛同城线下观战
2015/07/18 DOTA
python中偏函数partial用法实例分析
2015/07/08 Python
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
python之matplotlib学习绘制动态更新图实例代码
2018/01/23 Python
python自动重试第三方包retrying模块的方法
2018/04/24 Python
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
django创建简单的页面响应实例教程
2019/09/06 Python
Python错误的处理方法
2020/06/23 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
BIBLOO捷克:购买女装、男装、童装、鞋和配件
2017/01/27 全球购物
芬兰设计商店美国:Finnish Design Shop US
2019/03/25 全球购物
Sahajan美国:阿育吠陀护肤品牌
2021/01/09 全球购物
家具促销活动方案
2014/02/16 职场文书
会计学习心得体会
2014/09/09 职场文书
招商银行工作证明
2015/06/17 职场文书
win11高清晰音频管理器在哪里?win11找不到高清晰音频管理器解决办法
2022/04/08 数码科技
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers
基于Android10渲染Surface的创建过程
2022/08/14 Java/Android