/**
* 验证签名
* @param array $params 待签名的所有参数
* @param string $sign 生成的签名
* @return boolean 校验的结果
*/
function signCheck($params, $sign)
{
//生成待验签的字符串
$data = $this->getSignStr($params);
//对方的公钥内容 一行的形式
$publicKey = 'xxx';
$pem = "-----BEGIN PUBLIC KEY-----\n" .
wordwrap($publicKey, 64, "\n", true) .
"\n-----END PUBLIC KEY-----";
$checkResult = (bool)openssl_verify($data, base64_decode($sign), $pem, OPENSSL_ALGO_SHA256);
return $checkResult;
}
/**
* 我们自己的加密
* @param $str 待加密的字段
* @return string
*/
function encrypt($string)
{
//公钥内容 一行的形式
$pubKey = 'xxxx';
$res = "-----BEGIN PUBLIC KEY-----\n" .
wordwrap($pubKey, 64, "\n", true) .
"\n-----END PUBLIC KEY-----";
openssl_public_encrypt($string, $encrypt, $res);
return base64_encode($encrypt);
}
/**
* 我们自己的解密
* @param $secret 加密后的base64字段
* @return string
*/
function decrypt($secret)
{
//私钥内容 一行的形式
$privateKey = 'xx';
$res = "-----BEGIN RSA PRIVATE KEY-----\n" .
wordwrap($privateKey, 64, "\n", true) .
"\n-----END RSA PRIVATE KEY-----";
openssl_private_decrypt(base64_decode($secret), $oldData, $res);
return $oldData;
}
私钥加密 openssl_private_encrypt => 公钥解密 openssl_public_decrypt
公钥加密 openssl_public_encrypt => 私钥解密 openssl_private_decrypt
使用的时候分别使用对应的公钥 / 私钥的文件内容即可,我是把公钥和私钥都配置了一行形式 (也就是没有换行符等 方便配置吧)。