You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
payment/app/Helper/Efps/Signer.php

83 lines
3.4 KiB
PHP

<?php
namespace App\Helper\Efps;
use App\Helper\StringHelper;
class Signer
{
private static $privateKey = '-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC7ibPHSAc2glW5
ZHKhSJR8SHTwkAlN9H0KhiX+NzxuZirUd8VhyPKFcOeSvf+lRo8P7EHd2Hsfly39
SuTZv4LUqsU0ODw0bXuC7ys1P6kctUc8Pi5Zg7l2FpVQZIwxkszevuYmjSQ7NTA7
GAS/4pZX6C4yyDObQBV5nmSnhGXzKk/z3c6O829jgVlbFMAKKF//Q4TBiooOeZpY
rgkGtaZSN50puM+WDn7S/ETwZELBi2jRDqg6bJKYsCVPHW/yPdnMS0BMQcDhJsI8
3BwNvBiJQo4yZ0RmLw3SmIjcThieo74fcHH0Le0TFZRD1dl2OOgPO4lCFxFV6BM0
wARseqddAgMBAAECggEBAIXZb2XBQ9ykw3hRd/si6U+XC1eTBgEMiZ5URpOdatVE
uDby0P7MxEN3ZOB4GRkmNf9gWVZ0JtRSO3G33YSISmFtDNkLdfTZWzkFaKpVqGaj
/5bArqYW/OyKi8FYMjNDmlM0nuFPBVf4y1ax+tnVaAaP4UE/YI3i/DDUWvSw627U
PqTAAEEeJi624UsVIVLbiWQkaztiutPQYTxONYKt1xcI3OUUBETvRy621czlWIhO
I/bbThawyu4xLrN8eDa6KSeD+LvC3u5IumroDCgoKrOSuY3GesWN7rPm1uVTMCDe
CacQkc2Nx28PiiRFj8XiVzSdHFIEiNopLpHlIv6U+6ECgYEA9DlBhqZoX8pxc2Nq
tm+MLXeY16lr9W23em+51TIEgBnMSne2+yY4+ni0b4x0buFXgH7bR2mSoHzVDvjJ
nYA82YlYtKI6QiSUsKU0WDfzPWqUrTfkt2JUjIwBBFN4vY070Kcu3bV7CsoXLg2E
E6ThtRn7VCQ/+8R/uyU+kuWDXxkCgYEAxJS008rYLfDl6Mqt4gBWdX0OOmck+jQ7
nT5c/sPggi222z3ka+RGWRERbG40EXiP6xL0AEQ5GJhYITKODnd8XmeOQyMnlFwP
uD33cjhwdOhH2EYTW7KUumo1Dc1ZfPThNk3SnVLvTPBD9cli4vbsU73YhvQp/BDA
3aw3RhscBuUCgYEA5AJ4nL/L/nLBDNuqi30FQIXCGsbAVjkC7bpVoye5b+emBXhT
S5NZ6u66dtKI+eREj2DgVIHKNS+Wsw2vHe7V4LsMKEi1X39LmsgCYMKLw7E38aiX
TmbtTPKBGIrd1QqA58LOTIvcviwDDCnuP3DWkQAa12momuPP5OdWzkqdJjECgYEA
w1kbURRUO2MWtX0jymCXim1ZhEQXhOP/EcV1WF6CbhrLiZc5tNXF6qCBdgUVjP8H
1YyiGNmy+3P4sBSzAkFOv+mcf68hl9bccDRz/3eCmUpyisMoXYlbLtx4GF0mPnyC
iRpQ37IYx5ZDkq4rrGvAcX9I+uMMDccAQcjvrKUn9tkCgYAcx/Usx7dsJyq9qt0x
nPryFkGoDjUg4U5WFvN4d4et4oMDAvA4iFkPxdLlGokYtLC0cEsAmKEqVKVs/Zfa
FyqcOZZSfgy6c90YmbXTmEHIayR05IxVRrL0T+/CGtnYGsNPLGNCSL9eU7zxA+QW
HeJnufFo3VmRzqOQcqrLfi/scQ==
-----END PRIVATE KEY-----';
private static $publicKey = '';
public static function sign($params, $timestamp, $version = 2)
{
ksort($params);
$paramRows = [];
foreach ($params as $key => $value) {
$paramRows[] = $key . '=' . $value;
}
$queryString = implode('&', $paramRows);
if ($version == 1) {
return self::rsaWithSHA256Sign($queryString, self::$privateKey);
}
$randomKey = StringHelper::getRandomString(32);
$encKey = self::rsaWithSHA256Encypt($randomKey, self::$publicKey);
$sm3 = new \OneSm\Sm3();
$signBody = $sm3->sign($queryString . $timestamp . $encKey);
return self::rsaWithSHA256Sign($signBody, self::$privateKey);
}
public static function rsaWithSHA256Sign($content, $privateKey)
{
$key = openssl_get_privatekey($privateKey);
// openssl_private_encrypt($content, $signature, $privateKey, OPENSSL_PKCS1_PADDING);
openssl_sign($content, $signature, $key, OPENSSL_ALGO_SHA256);
openssl_free_key($key);
return base64_encode($signature);
}
public static function rsaWithSHA256Encypt($content, $publicKey)
{
$key = openssl_get_publickey($publicKey);
openssl_public_decrypt($content, $signature, $key, OPENSSL_PKCS1_PADDING);
openssl_free_key($key);
return base64_encode($signature);
}
public function verify($content, $sign, $publicKey)
{
$key = openssl_get_publickey($publicKey);
$ok = openssl_verify($content, base64_decode($sign), $key, 'SHA256');
openssl_free_key($key);
return $ok;
}
}