初始化代码
This commit is contained in:
126
application/common/yun/util/RsaUtil.php
Normal file
126
application/common/yun/util/RsaUtil.php
Normal file
@@ -0,0 +1,126 @@
|
||||
<?php
|
||||
namespace app\common\yun\util;
|
||||
use app\common\yun\Config;
|
||||
class RsaUtil
|
||||
{
|
||||
/**
|
||||
* 相关配置
|
||||
* @var Config
|
||||
*/
|
||||
protected $config;
|
||||
|
||||
/**
|
||||
* 云账户公钥
|
||||
* @var
|
||||
*/
|
||||
protected $public_key;
|
||||
|
||||
|
||||
/**
|
||||
* 商户私钥
|
||||
* @var
|
||||
*/
|
||||
protected $private_key;
|
||||
|
||||
/**
|
||||
* 初始化配置
|
||||
* RsaService constructor.
|
||||
* @param bool $type 默认私钥加密
|
||||
*/
|
||||
public function __construct(Config $config,$type = true)
|
||||
{
|
||||
$this->config = $config;
|
||||
if ($type) {
|
||||
$this->private_key = $this->getPrivateKey(); #商户私钥
|
||||
$this->public_key = $this->getPublicKey(); #云账户公钥
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 配置私钥
|
||||
* openssl_pkey_get_private这个函数可用来判断私钥是否是可用的,可用,返回资源
|
||||
* @return bool|resource
|
||||
*/
|
||||
private function getPrivateKey()
|
||||
{
|
||||
|
||||
$privateKey = openssl_get_privatekey($this->config->private_key);
|
||||
if(!$privateKey){
|
||||
die('私钥不可用');
|
||||
}
|
||||
return $privateKey;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 配置公钥
|
||||
* openssl_pkey_get_public这个函数可用来判断私钥是否是可用的,可用,返回资源
|
||||
* @return resource
|
||||
*/
|
||||
public function getPublicKey()
|
||||
{
|
||||
|
||||
$publicKey = openssl_pkey_get_public($this->config->public_key);
|
||||
if(!$publicKey){
|
||||
die('公钥不可用');
|
||||
}
|
||||
|
||||
return $publicKey ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 签名算法
|
||||
* @access public
|
||||
* @param $data
|
||||
* @return string
|
||||
*/
|
||||
public function sign($data){
|
||||
$res=openssl_get_privatekey($this->getPrivateKey());
|
||||
if($res)
|
||||
{
|
||||
openssl_sign($data, $sign,$res,"SHA256");
|
||||
openssl_free_key($res);
|
||||
}else {
|
||||
exit("私钥格式有误");
|
||||
}
|
||||
$sign = base64_encode($sign);
|
||||
return $sign;
|
||||
|
||||
}
|
||||
/**
|
||||
* 验签
|
||||
* @access public
|
||||
* @param $data
|
||||
* @return
|
||||
*/
|
||||
public function verify($response){
|
||||
$signData = "data=".$response['data']."&mess=".$response['mess']."×tamp=".$response['timestamp']."&key=".$this->config->app_key;
|
||||
// echo $signData;die;
|
||||
$result = (bool)openssl_verify( $signData, base64_decode($response['sign']), $this->public_key,"SHA256");
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 私钥解密
|
||||
* @param $data
|
||||
* @param bool $unserialize
|
||||
* @return mixed
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function privateDecrypt($data, $unserialize = false)
|
||||
{
|
||||
openssl_private_decrypt(base64_decode($data),$decrypted, $this->private_key);
|
||||
|
||||
if ($decrypted === false) {
|
||||
throw new \Exception('Could not decrypt the data.');
|
||||
}
|
||||
|
||||
return $unserialize ? unserialize($decrypted) : $decrypted;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user