подпишите тело запроса своим личным ключом php openssl - PullRequest
0 голосов
/ 24 апреля 2020

Привет, друг, я хочу спросить что-нибудь
здесь люди знают, как это сделать

Необходимое условие:

  1. генерировать приватный и общедоступный c ключ.
  2. отправить publi c ключ представителю xxx Процесс:

    1. подписать тело запроса с закрытым ключом
    2. кодировать подпись в base64
    3. положить результат шага 2 в заголовок Подпись
    4. отправить запрос

Проверка подписи:

Условие: получить и сохранить xxx publi c ключ

Процесс:

  1. получение запроса
  2. получение значения заголовка подписи
  3. декодирование его из base64
  4. проверьте, что результат шага 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);
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...