您当前的位置: 首页 > 网站编程 > PHP教程 > 使用openssl实现rsa非对称加密算法示例

使用openssl实现rsa非对称加密算法示例

作者:不详 来源:网络 发布时间: 2014-08-07 20:44 点击:
这篇文章主要介绍了使用openssl实现rsa非对称加密算法的示例,大家参考使用吧 代码如下: ?php /** * 使用openssl实现非对称加密 * @since 2010-07-08 */ class Rsa { /** * private key */ private $_privKey; /** * public key */ private $_pubKey; /** * the keys s

使用openssl实现rsa非对称加密算法示例

  这篇文章主要介绍了使用openssl实现rsa非对称加密算法的示例,大家参考使用吧

  代码如下:

  <?php

  /**

  * 使用openssl实现非对称加密

  * @since 2010-07-08

  */

  class Rsa

  {

  /**

  * private key

  */

  private $_privKey;

  /**

  * public key

  */

  private $_pubKey;

  /**

  * the keys saving path

  */

  private $_keyPath;

  /**

  * the construtor,the param $path is the keys saving path

  */

  public function __construct($path)

  {

  if(empty($path) || !is_dir($path)){

  throw new Exception('Must set the keys save path');

  }

  $this->_keyPath = $path;

  }

  /**

  * create the key pair,save the key to $this->_keyPath

  */

  public function createKey()

  {

  $r = openssl_pkey_new();

  openssl_pkey_export($r, $privKey);

  file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR . 'priv.key', $privKey);

  $this->_privKey = openssl_pkey_get_public($privKey);

  $rp = openssl_pkey_get_details($r);

  $pubKey = $rp['key'];

  file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR . 'pub.key', $pubKey);

  $this->_pubKey = openssl_pkey_get_public($pubKey);

  }

  /**

  * setup the private key

  */

  public function setupPrivKey()

  {

  if(is_resource($this->_privKey)){

  return true;

  }

  $file = $this->_keyPath . DIRECTORY_SEPARATOR . 'priv.key';

  $prk = file_get_contents($file);

  $this->_privKey = openssl_pkey_get_private($prk);

  return true;

  }

  /**

  * setup the public key

  */

  public function setupPubKey()

  {

  if(is_resource($this->_pubKey)){

  return true;

  }

  $file = $this->_keyPath . DIRECTORY_SEPARATOR . 'pub.key';

  $puk = file_get_contents($file);

  $this->_pubKey = openssl_pkey_get_public($puk);

  return true;

  }

  /**

  * encrypt with the private key

  */

  public function privEncrypt($data)

  {

  if(!is_string($data)){

  return null;

  }

  $this->setupPrivKey();

  $r = openssl_private_encrypt($data, $encrypted, $this->_privKey);

  if($r){

  return base64_encode($encrypted);

  }

  return null;

  }

  /**

  * decrypt with the private key

  */

  public function privDecrypt($encrypted)

  {

  if(!is_string($encrypted)){

  return null;

  }

  $this->setupPrivKey();

  $encrypted = base64_decode($encrypted);

  $r = openssl_private_decrypt($encrypted, $decrypted, $this->_privKey);

  if($r){

  return $decrypted;

  }

  return null;

  }

  /**

  * encrypt with public key

  */

  public function pubEncrypt($data)

  {

  if(!is_string($data)){

  return null;

  }

  $this->setupPubKey();

  $r = openssl_public_encrypt($data, $encrypted, $this->_pubKey);

  if($r){

  return base64_encode($encrypted);

  }

  return null;

  }

  /**

  * decrypt with the public key

  */

  public function pubDecrypt($crypted)

  {

  if(!is_string($crypted)){

  return null;

  }

  $this->setupPubKey();

  $crypted = base64_decode($crypted);

  $r = openssl_public_decrypt($crypted, $decrypted, $this->_pubKey);

  if($r){

  return $decrypted;

  }

  return null;

  }

  public function __destruct()

  {

  @ fclose($this->_privKey);

  @ fclose($this->_pubKey);

  }

  }

  //以下是一个简单的测试demo,如果不需要请删除

  $rsa = new Rsa('ssl-key');

  //私钥加密,公钥解密

  echo 'source:我是老鳖<br />';

  $pre = $rsa->privEncrypt('我是老鳖');

  echo 'private encrypted:<br />' . $pre . '<br />';

  $pud = $rsa->pubDecrypt($pre);

  echo 'public decrypted:' . $pud . '<br />';

  //公钥加密,私钥解密

  echo 'source:干IT的<br />';

  $pue = $rsa->pubEncrypt('干IT的');

  echo 'public encrypt:<br />' . $pue . '<br />';

  $prd = $rsa->privDecrypt($pue);

  echo 'private decrypt:' . $prd;

  ?>

  需要注意的是apache要支持OpenSSL
分享到:
本文"使用openssl实现rsa非对称加密算法示例"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4