通过id为openssl_verify函数获取ECDSA密钥

时间:2018-02-06 05:24:33

标签: php verify php-openssl ecdsa

我需要一些帮助。 我有一个带有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

1 个答案:

答案 0 :(得分:0)

@Lawrence Cherone为我回答工作。 Parse public keys from .txt file by 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";
}

请求帮助