我需要一些帮助。 我有一个带有ecdsa公钥的txt文件:
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
函数中按ID使用密钥。
我的代码:
$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){
.....
}
现在我的问题/问题:
我还在返回URL中有KEY_ID参数。当ID为1时,一切正常,因为openssl_pkey_get_public
函数始终只返回ID 1键。
Q1:我无法检索其他密钥。
Q2:如何指定要用于openssl_pkey_get_public
的ID?
我为自己的无知和愚蠢而感到羞耻。 有人可以帮我这个吗? THX
答案 0 :(得分:0)
我的代码:
$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";
}
请求帮助