我有以下示例:如何使用私钥对JWT密钥进行签名,然后使用PHP上的公共密钥对其进行解码
$privKey = openssl_pkey_new(array('digest_alg' => 'sha256',
'private_key_bits' => 1024,
'private_key_type' => OPENSSL_KEYTYPE_RSA));
$msg = JWT::encode('abc', $privKey, 'RS256');
$pubKey = openssl_pkey_get_details($privKey);
$pubKey = $pubKey['key'];
$decoded = JWT::decode($msg, $pubKey, array('RS256'));
$this->assertEquals($decoded, 'abc');
但是它在这里生成然后动态使用生成的密钥,如果我需要使用已经生成的私钥和公钥怎么办?是否有可能/足够使用file_get_contents
?
更新
我发现openssl_pkey_get_private和openssl_pkey_get_public我会尝试使用此代码。
答案 0 :(得分:0)
解决方案:
$private = openssl_pkey_get_private('file://key', 'keyphrase');
$token = \Firebase\JWT\JWT::encode('magic', $private, 'RS256');
$public = openssl_pkey_get_public('file://key.pub');
$data = \Firebase\JWT\JWT::decode($token, $public, ['RS256']);