|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- <?php
-
- namespace fast;
-
- /**
- * RSA签名类
- */
- class Rsa
- {
- public $publicKey = '';
- public $privateKey = '';
- private $_privKey;
-
- /**
- * * private key
- */
- private $_pubKey;
-
- /**
- * * public key
- */
- private $_keyPath;
-
- /**
- * * the keys saving path
- */
-
- /**
- * * the construtor,the param $path is the keys saving path
- * @param string $publicKey 公钥
- * @param string $privateKey 私钥
- */
- public function __construct($publicKey = null, $privateKey = null)
- {
- $this->setKey($publicKey, $privateKey);
- }
-
- /**
- * 设置公钥和私钥
- * @param string $publicKey 公钥
- * @param string $privateKey 私钥
- */
- public function setKey($publicKey = null, $privateKey = null)
- {
- if (!is_null($publicKey)) {
- $this->publicKey = $publicKey;
- }
- if (!is_null($privateKey)) {
- $this->privateKey = $privateKey;
- }
- }
-
- /**
- * * setup the private key
- */
- private function setupPrivKey()
- {
- if (is_resource($this->_privKey)) {
- return true;
- }
- $pem = chunk_split($this->privateKey, 64, "\n");
- $pem = "-----BEGIN PRIVATE KEY-----\n" . $pem . "-----END PRIVATE KEY-----\n";
- $this->_privKey = openssl_pkey_get_private($pem);
- return true;
- }
-
- /**
- * * setup the public key
- */
- private function setupPubKey()
- {
- if (is_resource($this->_pubKey)) {
- return true;
- }
- $pem = chunk_split($this->publicKey, 64, "\n");
- $pem = "-----BEGIN PUBLIC KEY-----\n" . $pem . "-----END PUBLIC KEY-----\n";
- $this->_pubKey = openssl_pkey_get_public($pem);
- 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;
- }
-
- /**
- * 构造签名
- * @param string $dataString 被签名数据
- * @return string
- */
- public function sign($dataString)
- {
- $this->setupPrivKey();
- $signature = false;
- openssl_sign($dataString, $signature, $this->_privKey);
- return base64_encode($signature);
- }
-
- /**
- * 验证签名
- * @param string $dataString 被签名数据
- * @param string $signString 已经签名的字符串
- * @return number 1签名正确 0签名错误
- */
- public function verify($dataString, $signString)
- {
- $this->setupPubKey();
- $signature = base64_decode($signString);
- $flg = openssl_verify($dataString, $signature, $this->_pubKey);
- return $flg;
- }
-
- public function __destruct()
- {
- is_resource($this->_privKey) && @openssl_free_key($this->_privKey);
- is_resource($this->_pubKey) && @openssl_free_key($this->_pubKey);
- }
- }
|