php rsa 封装,封裝php的非對稱加密RSA

该博客介绍如何在PHP中封装openssl扩展以实现RSA非对称加密。作者提供了一个名为Rsa的类,包含了创建密钥对、私钥加密、私钥解密、公钥加密和公钥解密等方法。在Windows环境下,需要正确配置openssl扩展和环境变量才能运行。提供的示例代码展示了如何使用这个Rsa类进行加密和解密操作。
摘要由CSDN通过智能技术生成

將php的openssl擴展中的非對稱加密函數封裝成一個Rsa類。

需要注意的是,在windows上,需要打開openssl的配置文件,請參照官方的openssl擴展安裝文檔。

//以下說明2011-06-23添加

在windows上安裝openssl擴展

1、將php路徑下的兩個庫文件libeay32.dll和ssleay32.dll復制到操作system32下

2、配置openssl配置文件的位置,在php的路徑下,有文件extras/openssl/openssl.cnf,添加環境變量OPENSSL_CONF指向這個文件的全路徑。如何添加環境變量請google搜索之。

3、在php.ini里添加一行extension=php_openssl.dll

使用的demo:

//====================demo=======================

//以下是一個簡單的測試demo,如果不需要請刪除

$rsa = new Rsa('sslkey'); //sslkey為存放密鑰的路徑,將已有的密鑰文件復制到該路徑下,公鑰名稱為pub.key,私鑰名稱為priv.key

$rsa->createKey(); //創建一對密鑰,如果密鑰對已經存在,不需調用

//私鑰加密,公鑰解密

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;

//========================demo======================

本示例在windows7、php 5.2.14、openssl 0.98下開發

/**

* 使用openssl實現非對稱加密

*

* @author 老鱉

* @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_private($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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值