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 Mysql日期和时间函数集合
Nov 16 PHP
延长phpmyadmin登录时间的方法
Feb 06 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
Jul 17 PHP
php教程 插件机制在PHP中实现方案
Nov 02 PHP
PHP+APACHE实现网址伪静态
Feb 22 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
Mar 17 PHP
php生成年月日下载列表的方法
Apr 24 PHP
php正则表达式获取内容所有链接
Jul 24 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
Dec 14 PHP
PHP GD库相关图像生成和处理函数小结
Sep 30 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
Jul 31 PHP
PHP高精确度运算BC函数库实例详解
Aug 15 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
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
2008/09/10 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
PHP加密技术的简单实现
2016/09/04 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
2017/07/27 PHP
Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解
2019/12/04 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
JS验证IP,子网掩码,网关和MAC的方法
2015/07/02 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
2016/12/21 Javascript
微信小程序 跳转方式总结
2017/04/20 Javascript
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
webpack项目调试以及独立打包配置文件的方法
2018/02/28 Javascript
vue 利用路由守卫判断是否登录的方法
2018/09/29 Javascript
js防抖和节流的深入讲解
2018/12/06 Javascript
如何进行微信公众号开发的本地调试的方法
2019/06/16 Javascript
ES6中Promise的使用方法实例总结
2020/02/18 Javascript
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
Python中给List添加元素的4种方法分享
2014/11/28 Python
python在不同层级目录import模块的方法
2016/01/31 Python
《Python学习手册》学习总结
2018/01/17 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
Django实现支付宝付款和微信支付的示例代码
2018/07/25 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
python图的深度优先和广度优先算法实例分析
2019/10/26 Python
django实现用户注册实例讲解
2019/10/30 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
政府门卫岗位职责
2014/04/29 职场文书
捐献物资倡议书范文
2014/05/19 职场文书
师德师风个人整改措施
2014/10/27 职场文书
2015年银行工作总结范文
2015/04/01 职场文书
关爱留守儿童捐款倡议书
2015/04/27 职场文书
Python Pandas常用函数方法总结
2021/06/15 Python
海弦WR-800F
2022/04/05 无线电