admin 管理员组

文章数量: 1086019


2024年4月23日发(作者:乱世佳人电视剧在线观看免费完整版)

//

//需要配置文件,打开extension=php_

include '';

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

$rsa = new Rsa('D:......rsa'); //放项目的PHP目录

//私钥加密,公钥解密

echo 'source:Testing:Hello World!
';

$pre = $rsa->privEncrypt('Testing:Hello World!');

echo 'Private Encrypted:' . $pre . '
';

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

echo 'Public Decrypted:' . $pud . '
';

//公钥加密,私钥解密

echo 'source:working in here!
';

$pue = $rsa->pubEncrypt('working in here!');

echo 'Public Encrypt:' . $pue . '
';

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

echo 'Private Decrypt:' . $prd;

?>

//

/**

* 使用openssl实现非对称加密

*/

class Rsa{

private $_privKey; /*** private key*/

private $_pubKey; /*** public key*/

private $_keyPath; /*** the keys saving path*/

/**

* 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 . '', $privKey);

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

$rp = openssl_pkey_get_details($r);

$pubKey = $rp['key'];

file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR . '', $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 . '';

$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 . '';

$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);

}

}

?>

加密使用 公钥, 解密使用 私钥

签名使用 私钥, 验证使用 公钥

私钥 可以导出 公钥

产生私钥, 指定位数1024, 公钥指数e, 通常是3, 17, 65537

$ openssl genrsa -out 1024

Generating RSA private key, 1024 bit long modulus

…..++++++

……++++++

e is 65537 (0×10001)

取出公钥

$ openssl rsa -in -pubout -out


本文标签: 公钥 私钥 使用 加密 需要