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 相关文章推荐
解决控件遮挡问题:关于有窗口元素和无窗口元素
Jan 28 PHP
php 不同编码下的字符串长度区分
Sep 26 PHP
php下将图片以二进制存入mysql数据库中并显示的实现代码
May 27 PHP
一个PHP的QRcode类与大家分享
Nov 13 PHP
php 地区分类排序算法
Jul 01 PHP
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
Jul 05 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
Jan 12 PHP
php读取目录及子目录下所有文件名的方法
Oct 20 PHP
PHP中通过trigger_error触发PHP错误示例
Jun 23 PHP
php微信公众平台开发之获取用户基本信息
Aug 17 PHP
自制PHP框架之模型与数据库
May 07 PHP
php判断str字符串是否是xml格式数据的方法示例
Jul 26 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出错界面
2006/10/09 PHP
PHP查询快递信息的方法
2015/03/07 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
php生成微信红包数组的方法
2019/09/05 PHP
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
2014/08/12 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
2015/04/30 Javascript
深入浅析JavaScript中的constructor
2016/04/19 Javascript
js生成随机数(指定范围)的实例代码
2016/07/10 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
ng2学习笔记之bootstrap中的component使用教程
2017/03/09 Javascript
巧用weui.topTips验证数据的实例
2017/04/17 Javascript
jQuery实现按比例缩放图片的方法
2017/04/29 jQuery
Angular4实现动态添加删除表单输入框功能
2017/08/11 Javascript
jQuery选择器之属性筛选选择器用法详解
2017/09/19 jQuery
vue和react等项目中更简单的实现展开收起更多等效果示例
2018/02/22 Javascript
JavaScript基础心法 数据类型
2018/03/05 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
微信小程序Page中data数据操作和函数调用方法
2019/05/08 Javascript
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
2020/03/23 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
JS写滑稽笑脸运动效果
2020/05/28 Javascript
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS TNC
2018/03/30 DOTA
Python设计模式之观察者模式简单示例
2018/01/10 Python
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
2019/10/11 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
Html5元素及基本语法详解
2016/08/02 HTML / CSS
如何利用cmp命令比较文件
2016/04/11 面试题
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
JSP&Servlet技术面试题
2015/05/21 面试题
专科毕业生自我鉴定
2013/12/01 职场文书
科长竞争上岗演讲稿
2014/05/12 职场文书
中学生打架检讨书
2014/10/13 职场文书
CSS中Single Div 绘图技巧的实现
2021/06/18 HTML / CSS