我试图使用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" => "http://example.org",

"aud" => "http://example.com",

"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" => "http://example.org",

"aud" => "http://example.com",

"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/20191108/2009941.html

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

  1. jwt私钥和公钥怎么获取_公钥与私钥

    在对称加密的时代,加密和解密用的是同一个密钥,这个密钥既用于加密,又用于解密.这样做有一个明显的缺点,如果两个人之间传输文件,两个人都要知道密钥,如果是三个人呢,五个人呢?于是就产生了非对称加密,用一 ...

  2. jwt私钥和公钥怎么获取_jwt 用rsa公钥私钥进行验证(python发送,java接受)

    JWT的主要应用场景 身份认证在这种场景下,一旦用户完成了登陆,在接下来的每个请求中包含JWT,可以用来验证用户身份以及对路由,服务和资源的访问权限进行验证.由于它的开销非常小,可以轻松的在不同域名的 ...

  3. 如何检查私钥和公钥是否配对_如何检查家具是否有臭虫

    如果您购买了二手家具,或者家具使用好多年了,那么由于家庭环境等问题,难免会出现臭虫! 臭虫可以通过许多不同的方式进入您的房屋,但是最常见的方法之一是您的二手家具. 关于臭虫 首先,让我们从臭虫入门.这 ...

  4. 公钥和私钥怎么生成_科普 | Eth2 验证者如何生成和保护取款密钥

    来源 | 以太坊爱好者 作者|Jim McDonald责编|晋兆雨 取款密钥是什么? 取款密钥(withdrawal key)是以太坊 2.0 中的验证者用来提现以太币的密钥 [1].以太坊 2.0 ...

  5. 安卓客户端如何获取支付宝私钥与公钥

    项目需要,需要在客户端集成支付宝接口.就研究了一下:因为使用支付宝接口,就需要到支付宝官网:注册帐号,并申请.下面讲的是申请好之后的操作.登录成功之后,   店家我的商家服务-在页面的下方找到--&g ...

  6. 支付宝获取私钥和公钥

    支付宝官网:店家我的商家服务-在页面的下方找到-->签约管理->找打 移动支付-–>点击下载集成文档->跳到新的页面,在页面下方->找到下载开发包,下载移动支付即可.然后 ...

  7. 移动平台商家支付宝如何获取商户私钥,支付宝公钥。

    1.简介 RSA 是一种非对称的签名算法,即签名密钥(私钥)与验签密钥(公钥)是不一样的, 私钥用于签名,公钥用于验签. 在与支付宝交易中,会有 2 对公私钥,即商户私钥,支付宝公钥. 商户公私钥:由 ...

  8. jwt 私钥_一分钟带你了解JWT认证

    一.JWT简介 JSON Web Token(JWT)是一个开放的标准(RFC 7519),它定义了一个紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息.由于此信息是经过数字签名的,因 ...

  9. java中使用openssl生成的rsa公私钥进行数据加解密_使用openssl生成RSA公钥和私钥对...

    在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互界面 ...

最新文章

  1. 吴恩达:关于机器学习职业生涯以及阅读论文的一些建议
  2. python turtle画彩虹-python绘制樱花,彩虹旋等
  3. jenkins内置变量的使用
  4. MySQL创建数据表(CREATE TABLE语句)
  5. 2019 ASP.NET Core 之微调查报告,新鲜出炉
  6. ssh(Spring+Spring mvc+hibernate)——EmpDaoImpl.java
  7. 这款Linux 恶意软件正在劫持全球的超级计算机
  8. url-pattern配置技巧
  9. android 预优化oat_Android内存优化大盘点
  10. Clear Type技术
  11. android today上下卡片,在 Android 手机上看天气,你有这些高颜值、无广告的选择...
  12. 删除字符串数组中的空字符串
  13. ca根证书校验 java_JAVA-Android-根据CA证书验证X509Certificate(颁发者证书)
  14. vue3+ts+element-plus动态图标生成方式
  15. 企业微信客户端开启调试模式
  16. 2022-2028年中国红枣行业发展模式分析及市场分析预测报告
  17. 4星|《职场老手的情绪管理法》:生活中的10%是由发生在你身上的事情组成,而另外的90%则是由你对所发生的事情如何反应所决定...
  18. Efficient bipedal robots based on passive-dynamic walkers
  19. 都马上2020年了,还学什么PMP?
  20. 发现了一个很好的搜索引擎

热门文章

  1. PTA 07-图6 旅游规划
  2. springBoot集成 Elastic-job
  3. 写在2019年后的蚂蚁、头条、拼多多的面试总结
  4. 全球与中国自洁式空气过滤器市场现状及未来发展趋势(2022)
  5. sax dom html解析xml,Python通过DOM和SAX方式解析XML的应用实例分享
  6. python字典序列化是什么意思_python序列化中的字符串,列表,字典,类的序列化解释...
  7. 【51NOD 1737】配对
  8. uni-app打开外链
  9. RocketMQTemplate基本使用
  10. TED | 怎样成为一个自律的人