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 相关文章推荐
探讨如何在PHP开启gzip页面压缩实例
Jun 09 PHP
使用php 获取时间今天明天昨天时间戳的详解
Jun 20 PHP
php防注入及开发安全详细解析
Aug 09 PHP
php中如何使对象可以像数组一样进行foreach循环
Aug 09 PHP
PHP的引用详解
Feb 22 PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
Feb 04 PHP
php封装的验证码类分享
Feb 26 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
Apr 18 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
Jul 07 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
Feb 23 PHP
PHP数组去重的更快实现方式分析
May 09 PHP
php unlink()函数使用教程
Jul 12 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
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
Javascript实例教程(19) 使用HoTMetal(6)
2006/12/23 Javascript
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
在html页面上拖放移动标签
2010/01/08 Javascript
javascript+xml实现简单图片轮换(只支持IE)
2012/12/23 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
2013/12/18 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
2017/08/15 Javascript
Node.js简单入门前传
2017/08/21 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
2017/12/28 Javascript
javascript中UMD规范的代码推演
2018/08/29 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
浅谈JavaScript中等号、双等号、 三等号的区别
2020/08/06 Javascript
[04:29]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/02/01 DOTA
[01:47]2018年度DOTA2最具人气解说-完美盛典
2018/12/16 DOTA
用Python中的字典来处理索引统计的方法
2015/05/05 Python
Python编程之多态用法实例详解
2015/05/19 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
2018/06/28 Python
Python设计模式之解释器模式原理与用法实例分析
2019/01/10 Python
python自动化工具之pywinauto实例详解
2019/08/26 Python
Python实现打印实心和空心菱形
2019/11/23 Python
详解Python3中的 input() 函数
2020/03/18 Python
解决Django Haystack全文检索为空的问题
2020/05/19 Python
会计专业毕业生推荐信
2013/11/05 职场文书
单位委托书怎么写
2014/08/02 职场文书
党支部特色活动方案
2014/08/20 职场文书
意外死亡赔偿协议书
2014/10/14 职场文书
群众路线表态发言材料
2014/10/17 职场文书
2015年学校远程教育工作总结
2015/07/20 职场文书
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers