2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 使用openssl实现rsa非对称加密算法示例【PHP】

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

时间:2019-03-05 23:20:49

相关推荐

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

后端开发|php教程

openssl,rsa,非对称加密算法

后端开发-php教程

娱乐拍卖网站源码,vscode配置c保留终端,vlc ubuntu编译,tomcat容器持久化,海缸爬虫,php 获取天气预报,彭水省心seo推广代运营,网站的源代码,javaweb网站模板lzw

<?php

/**

* 使用openssl实现非对称加密

* @since -07-08

*/

class Rsa

{

/**

* private key

*/

private $_privKey;

猎头公司源码,网盘下载ubuntu,爬虫程序 链家,php图层,虎牙直播SEOlzw

/**

* public key

*/

private $_pubKey;

软件源码之家,vscode搜索pdf,ubuntu编译驱动补丁,Tomcat维护方案,sqlite级联删除,jquery标签云插件,前端技术框架图片学习,车主数据爬虫,php $session,SEO监控宠物,捧腹笑话网站源码,psd 网页,金融投资 html5模板,html个人信息页面图片,网吧系统管理系统c,人人商城小程序前端源码v5版lzw

/**

* 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:我是老鳖

;

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

echo private encrypted:

. $pre .

;

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

echo public decrypted: . $pud .

;

//公钥加密,私钥解密

echo source:干IT的

;

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

echo public encrypt:

. $pue .

;

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

echo private decrypt: . $prd;

?>

需要注意的是apache要支持OpenSSL

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。