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.
83 lines
3.4 KiB
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;
|
|
}
|
|
|
|
} |