可以用Php加密JWT令牌,用Javascript解密吗?

可以用Php加密JWT令牌,用Javascript解密吗?,javascript,php,encryption,jwt,jose,Javascript,Php,Encryption,Jwt,Jose,我目前正在为JWT使用两个库。第一个用于服务器端 第二个用于客户端 我正在创建一个基于令牌的登录系统。我只想在服务器端创建一个令牌,在使用JWE(JSON WEB ENCRYPTION)加密后,将该令牌返回给客户端并保存到html5本地存储 问题是在javascript JOSE库中解密加密的令牌,因为a是标准格式,所以从平台(PHP、Java、JS…)发出JWE并用另一个平台读取它是没有问题的 这里唯一的问题是 您必须为要使用的每个平台找到一个库 这些库必须具有通用算法 我不知道,但代

我目前正在为JWT使用两个库。第一个用于服务器端

第二个用于客户端

我正在创建一个基于令牌的登录系统。我只想在服务器端创建一个令牌,在使用JWE(JSON WEB ENCRYPTION)加密后,将该令牌返回给客户端并保存到html5本地存储

问题是在javascript JOSE库中解密加密的令牌

,因为a是标准格式,所以从平台(PHP、Java、JS…)发出JWE并用另一个平台读取它是没有问题的

这里唯一的问题是

  • 您必须为要使用的每个平台找到一个库
  • 这些库必须具有通用算法
我不知道,但代码审查和我执行的测试表明,它支持一些众所周知的算法(
RSA1_5
/
RSA-OAEP
/
dir
用于密钥加密,而
A128CBC-HS256
/
A256CBC-HS512
用于内容加密)

如果您在项目中使用
RSA-OAEP
A128CBC-HS256
A256CBC-HS512
,那么您应该能够在一侧加密,在另一侧解密

如果您想在PHP上使用其他算法,如
AxxxKW
AxxxGCM
,您应该查看支持十几种算法、压缩等的PHP库

您还应该看看在几个平台上列出了许多Jose实现的列表

编辑 专用/公用RSA密钥转换器

与:


jose php库使用公钥加密,私钥描述PEM格式,javascript库使用json格式的RSA密钥。请告诉我如何将PEM格式的公钥或私钥转换为JSON格式的RSA密钥我刚刚更新了答案。我希望它能对你有所帮助。我需要Javascript中的相同内容PHP JOSE库自2018年底以来一直没有得到积极支持。其安全保障将于2020年终止。图书馆页面建议使用。
<?php
use Jose\Factory\JWKFactory;
$key = JWKFactory::createFromKeyFile('/path/to/your/key.pem');
// The variable $key is a JWKInterface instance that can be easily converted into a JSON object: json_encode($key)
<?php
$res = openssl_pkey_get_private($data);
if (false === $res) {
    $res = openssl_pkey_get_public($data);
}
// Verify here that $res is not false.


$details = openssl_pkey_get_details($res);
//Verify here that the array $details has a key 'rsa' (could be 'ec')

$components = [
    'n'  => 'n',
    'e'  => 'e',
    'd'  => 'd',
    'p'  => 'p',
    'q'  => 'q',
    'dp' => 'dmp1',
    'dq' => 'dmq1',
    'qi' => 'iqmp',
];

$key = ['kty' => 'RSA'];
foreach ($details['rsa'] as $key => $value) {
    if (in_array($key, $components)) {
        $key[array_search($key, $components)] = Base64Url::encode($value); // Base64 Url Safe encoding. See https://github.com/Spomky-Labs/base64url
    }
}
// The variable $key is an array with the expected information