Привет, друг, я хочу спросить что-нибудь
здесь люди знают, как это сделать
Необходимое условие:
- генерировать приватный и общедоступный c ключ.
отправить publi c ключ представителю xxx Процесс:
- подписать тело запроса с закрытым ключом
- кодировать подпись в base64
- положить результат шага 2 в заголовок Подпись
- отправить запрос
Проверка подписи:
Условие: получить и сохранить xxx publi c ключ
Процесс:
- получение запроса
- получение значения заголовка подписи
- декодирование его из base64
- проверьте, что результат шага 3 действителен для комбинации этого тела запроса и xxx publi c key
Я надеюсь, что кто-то может помочь мне
Я пытался 2 дней и до сих пор не нашел ответ на эту проблему, я ходил взад и вперед по Google, но все еще не нашел ответ к этой проблеме
<code>function mgAccount(){
$token = bin2hex(openssl_random_pseudo_bytes(16));
$url = "http://aaaa.com";
$getFields = [
"xx_id" => 000,
];
$data_string = json_encode($getFields);
$sign = createPrivateAndPublicKey($data_string);
$header = array();
$header[] = "Content-Type: application/json";
$header[] = "Accept: application/json";
$header[] = "Signature: $sign";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
$output = curl_exec($ch);
echo '<pre>';
print_r($sign);
echo '
'; curl_close ($ ч); return json_decode ($ output, true); }
function createPrivateAndPublicKey($data)
{
$privateKeyId = openssl_pkey_get_private(file_get_contents('private.pem'));
openssl_sign($data, $signature, $privateKeyId, 'RSA-SHA256');
$sign = base64_encode($signature);
openssl_free_key($privateKeyId);
echo "signature: \n" . $sign . "\n";
$pub_key = openssl_pkey_get_public(file_get_contents('public.pem'));
$valid = openssl_verify($data, base64_decode($sign), $pub_key, 'RSA-SHA256');
if ($valid == 1){
echo "signature is valid \n";
} else {
echo "signature is NOT valid \n";
}
openssl_free_key($pub_key);
}