Мне нужна небольшая помощь.
У меня есть текстовый файл с открытыми ключами ECDSA:
KEY_ID: 1
STATUS: VALID
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+Y5mYZL/EEY9zGji+hrgGkeoyccK
D0/oBoSDALHc9+LXHKsxXiEV7/h6d6+fKRDb6Wtx5cMzXT9HyY+TjPeuTg==
-----END PUBLIC KEY-----
KEY_ID: 2
STATUS: VALID
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaq6djyzkpHdX7kt8DsSt6IuSoXjp
WVlLfnZPoLaGKc/2BSfYQuFIO2hfgueQINJN3ZdujYXfUJ7Who+XkcJqHQ==
-----END PUBLIC KEY-----
KEY_ID: 3
STATUS: VALID
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEkvgJ6sc2MM0AAFUJbVOD/i34YJJ8
ineqTN+DMjpI5q7fQNPEv9y2z/ecPl8qPus8flS4iLOOxdwGoF1mU9lwfA==
-----END PUBLIC KEY-----
Теперь мне нужно использовать ключ по идентификатору в openssl_verify
функция.
Мой код:
$ecdsa_url_string = 'ECDSA_URL_STRING';
$stringToVerify = 'MY_STRING';
$ecdsa_keys = openssl_pkey_get_public(file_get_contents(PATH . '/ecdsa_keys.txt'));
$verified = openssl_verify($stringToVerify,pack("H*",$ecdsa_url_string ),$ecdsa_keys,"sha256");
if($verified === 1){
.....
}
Теперь мой вопрос / проблема:
У меня также есть параметр KEY_ID в обратном URL. Когда ID равен 1, все в порядке, потому что openssl_pkey_get_public
Функция всегда возвращает только ключ ID 1.
Q1: я не могу получить другие ключи.
Q2: Как мне указать, какой идентификатор я хочу использовать для openssl_pkey_get_public
?
Мне стыдно за свое невежество и мою глупость.
Может кто-нибудь, пожалуйста, помогите мне с этим?
Спасибо
@ Лавренс Чероне ответь для меня.
Разобрать открытые ключи из .txt файла по php
мой код:
$ecdsa_keys = file_get_contents(PATH . '/ecdsa_keys.txt');
$ecdsa_key_id = 'KEY_FROM_URL';
function getKeyById($id, $ecdsa_keys){
if(preg_match("~KEY_ID: $id\s+STATUS: VALID\s+(-{5}BEGIN PUBLIC KEY-{5}.+?-{5}END PUBLIC KEY-{5})~s", $ecdsa_keys, $match)){
$result = $match[1];
return $result;
}
return null;
}
if(($ecdsa_key = getKeyById($ecdsa_key_id, $ecdsa_keys)) !== null){
echo "<pre>".$ecdsa_key."</pre>";
} else {
echo "not found";
}
спасибо за помощь
Других решений пока нет …