You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
2.3 KiB
110 lines
2.3 KiB
<?php
|
|
/**
|
|
* Utility, provide RSA public encrypt method and gzdecode function
|
|
*/
|
|
namespace tongjiApi;
|
|
|
|
class RsaPublicEncrypt {
|
|
/**
|
|
* @var string
|
|
*/
|
|
private $publicKey;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
private $path;
|
|
|
|
/**
|
|
* construct
|
|
* @param string $path
|
|
*/
|
|
public function __construct($path)
|
|
{
|
|
if(empty($path) || !is_dir($path))
|
|
{
|
|
return false;
|
|
}
|
|
$this->path = $path;
|
|
}
|
|
|
|
/**
|
|
* setup public key
|
|
* @return boolean
|
|
*/
|
|
public function setupPublicKey()
|
|
{
|
|
if(is_resource($this->publicKey))
|
|
{
|
|
return true;
|
|
}
|
|
$file = $this->path . DIRECTORY_SEPARATOR . 'api_pub.key';
|
|
$puk = file_get_contents($file);
|
|
$this->publicKey = openssl_pkey_get_public($puk);
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* pub encrypt
|
|
* @param string $data
|
|
* @return string
|
|
*/
|
|
public function pubEncrypt($data)
|
|
{
|
|
if(!is_string($data))
|
|
{
|
|
return null;
|
|
}
|
|
$this->setupPublicKey();
|
|
$ret = openssl_public_encrypt($data, $encrypted, $this->publicKey);
|
|
if($ret)
|
|
{
|
|
return $encrypted;
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* destruct
|
|
*/
|
|
public function __destruct()
|
|
{
|
|
@fclose($this->publicKey);
|
|
}
|
|
}
|
|
|
|
if (!function_exists('gzdecode')) {
|
|
/**
|
|
* gzdecode
|
|
* @param string $data
|
|
* @return string
|
|
*/
|
|
function gzdecode($data) {
|
|
$flags = ord(substr($data, 3, 1));
|
|
$headerlen = 10;
|
|
$extralen = 0;
|
|
$filenamelen = 0;
|
|
if ($flags & 4) {
|
|
$extralen = unpack('v' ,substr($data, 10, 2));
|
|
$extralen = $extralen[1];
|
|
$headerlen += 2 + $extralen;
|
|
}
|
|
if ($flags & 8) {
|
|
$headerlen = strpos($data, chr(0), $headerlen) + 1;
|
|
}
|
|
if ($flags & 16) {
|
|
$headerlen = strpos($data, chr(0), $headerlen) + 1;
|
|
}
|
|
if ($flags & 2) {
|
|
$headerlen += 2;
|
|
}
|
|
$unpacked = @gzinflate(substr($data, $headerlen));
|
|
if ($unpacked === false) {
|
|
$unpacked = $data;
|
|
}
|
|
return $unpacked;
|
|
}
|
|
}
|
|
|