Статус: Новичок
Группы: Участники
Зарегистрирован: 27.05.2022(UTC) Сообщений: 1 
|
Доработал тестовый скрипт На вход принимает jwt токен и путь до файла сертификата, пример использования: Цитата:php verify.php "jwtToken" "./cert.crt" verify.php Код:<?php
function base64url_decode($data) {
return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
}
if (empty($argv[1])) {
echo "error: input is empty";
exit(1);
}
$jwt = $argv[1];
$jwtArray = explode(".", $jwt);
if (empty($jwtArray[0]) || empty($jwtArray[1]) || empty ($jwtArray[2])) {
echo "error: jwt is not valid";
exit(1);
}
$certPath = $argv[2];
if (!file_exists($certPath)) {
echo "error: certificate file is not exists";
exit(1);
}
$data = $jwtArray[0].".".$jwtArray[1];
$signature = $jwtArray[2];
$signatureDecoded = strrev(base64url_decode($signature));
$signatureHex = bin2hex($signatureDecoded);
// Разделяем подпись пробелами группами по 2 цифры на байт
$signatureSplit = implode(" ", str_split($signatureHex, 2));
$cert = new CPCertificate();
$cert->Import(file_get_contents($certPath));
// Вычисляем хэш полученных не зашифрованных данных с помощью cadesphp
$hashedData = new CPHashedData();
$hashedData->set_Algorithm(CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256);
$hashedData->set_DataEncoding(BASE64_TO_BINARY);
$hashedData->Hash(base64_encode($data));
$rawSignature = new CPRawSignature();
try {
$rawSignature->VerifyHash($hashedData, $signatureSplit, $cert);
echo "success";
} catch(Exception $e) {
echo "error: {$e->getMessage()}";
exit(1);
}
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close