300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > jwt私钥和公钥怎么获取_如何为php-jwt生成密钥对?

jwt私钥和公钥怎么获取_如何为php-jwt生成密钥对?

时间:2023-02-01 07:00:35

相关推荐

jwt私钥和公钥怎么获取_如何为php-jwt生成密钥对?

我试图使用PHP-JWT生成JWT,但我总是最终收到错误:

PHP Warning: openssl_sign(): supplied key param cannot be coerced into a private key

我已经尝试使用openssl生成密钥对,使用opennssl用密码保护密钥,然后使用openssl_get_privatekey()读取密钥,我尝试将密钥粘贴到php中的多行字符串中(EOT和EOD分隔符).然后,我尝试在示例页面上复制/粘贴键,但仍然出现相同的错误,我在这里遗漏了什么?

不知道这是否可能是一个问题,但是我正在Windows机器上进行开发,然后将其发送到远程服务器,这是一台Linux机器…

编辑:

我如何生成密钥:

openssl genrsa -aes256 -out private.pem 2048

阅读:

openssl_get_privatekey('keys/private.pem','0mrY2mX9NeAb0RmpcoeF');

openssl_get_privatekey('file://'.__DIR__.'/keys/private.pem','0mrY2mX9NeAb0RmpcoeF');

还尝试了:

openssl genrsa -out private.pem 2048

阅读:

file_get_contents('keys/private.pem');

还尝试了内联:

$private_key = <<

-----BEGIN RSA PRIVATE KEY-----

MIICXQIBAAKBgQCt2WlpqowIDCZj+KCAl6iNEHCZN4FCPF3YrWdhthS2ysjNIjmy

1WjrzWpIk2YhkHmpb/+vFc5Xwv+a4NuB9W+hUw5K6bkgnol2Zak4v0myHR0qZsQP

ot7vj1Od+rU/Nn29rnDkgowcNcnN5MqxPrDOayA1IysXo1hPg73Hq2o40QIDAQAB

AoGAfhfI2zk148hcN/pm/54ARIB+CsM1X4NFVhk/eKGGGKawSgje7JTZSt5sjkNK

umF9vKVdP/KC/SiUGBOrYnFQCvH7CYpG74XQmnKf7JhhTF8t+N6b9SKz7oRsLHXJ

YwDntLTJIMfnFSQe9M9LJTcUUmTkIvDqq4T6L6OfSIQ/UVkCQQDg0xv60l6ELEdQ

J27dTxfs/kG6C1yjkoFU1UnBa6VVF/4PDOaPY7HvGxjZW+i3tj59i01W/OHOwswA

2uGExZ2bAkEAxfTDeOZh3mOaJ34x+W2wXQYwSh37hveiAQDvr21g/vixHHIPwomI

pP6wfLFK/4ApJHKOkB9Ha/bvrVSvhZIgAwJAMNHGtp1txreyuJYHfekJ4f2IGjUT

ZbWPffNes7CDU0oFchE0E5jrb2dr6u8JRrM9OJfCMIxzICmukNT2uZUL1wJBAKd0

cTLBuIKWwR2ta/ry5iEbDhh0moTG0D2HHDrLDSVDHRfSCTDohTYF2SfyFl5ifOs/

GQgj3ZggEQoQPFaCkR8CQQCVVyEBlUum82VDgpV+fBTYxzQo+bs7eWWPn93ebThv

4BVEwAHe7T6mjXwtu5U1iOB5h837aUp9Gc3mWprs/HUr

-----END RSA PRIVATE KEY-----

EOT;

但是我认为问题不在于我如何生成密钥,因为自述文件上的示例对我不起作用

解决方法:

似乎您忘记了从私钥生成(或提取)公钥.

请确保您已完成以下步骤:

1)生成私钥:

openssl genrsa -out private.pem 2048

2)从私钥中提取公钥:

openssl rsa -in private.pem -outform PEM -pubout -out public.pem

3)和示例php代码:

require_once('vendor/autoload.php');

use \Firebase\JWT\JWT;

$privateKey = file_get_contents('./private.pem');

$publicKey = file_get_contents('./public.pem');

$payload = [

'data' => ['field1' => 1, 'field2' => 'string data'],

"iss" => "",

"aud" => "",

"iat" => 1531498466,

"eat" => 1557000000

];

$token = JWT::encode($payload, $privateKey, 'RS256');

echo "Token:\n" . print_r($token, true) . "\n";

$decoded = JWT::decode($token, $publicKey, ['RS256']);

$decoded_array = (array) $decoded;

echo "Decoded:\n" . print_r($decoded_array, true) . "\n";

奖励:HS256示例

由于HS256是对称算法,因此不需要私钥/公钥对.

您可以使用自己的类似blablabla的随机秘密字符串,而无需使用生成器等:

require_once('vendor/autoload.php');

use \Firebase\JWT\JWT;

$secret = 'blablabla-secret-string';

// or You can save that random text in .jwt-secret file and use this way

// $secret = file_get_contents('./.jwt-secret');

$payload = [

'data' => ['field1' => 1, 'field2' => 'string data'],

"iss" => "",

"aud" => "",

"iat" => 1531498466,

"eat" => 1557000000

];

$token = JWT::encode($payload, $secret, 'HS256');

echo "HS256 Token:\n" . print_r($token, true) . "\n";

$decoded = JWT::decode($token, $secret, ['HS256']);

$decoded_array = (array) $decoded;

echo "HS256 Token decoded:\n" . print_r($decoded_array, true) . "\n";

标签:jwt,php

来源: https://codeday.me/bug/1108/941.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。