问题标签 [jwe]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 有没有办法对使用 Laravel Passport 创建的访问令牌进行非对称加密?
我正在构建一个由 3 个服务器组成的应用程序。第一个是我Authorization server
的,第二个是我的Database server(API)
,最后是我的front-end server
。我想使用非对称加密来加密我生成的访问令牌,Authorization server
这样敏感数据就不会被泄露,并且我可以将它发送给我API
并验证发出请求的用户实际上是他们声称的那个人。Laravel Passport 中是否有任何东西可以使这个实现成为可能,还是使用第三方库(如PASETO或PHP JWT Framework )更好?
目前,当我向 Api 发出请求时
- Api 调用 以
Authorization server
使用访问令牌验证用户。 - 验证
Auth server
用户 - 如果用户验证,Api 会提供我们要求的资源,否则返回验证错误。
我想用非对称加密实现的是Auth server
在每次请求 API 之前消除对我的调用,我读到我可以使用非对称加密来实现这一点。
javascript - 在 Node.JS 中使用 node-jose 进行加密和解密
我正在尝试使用 Node.js 中的 node-jose 与 JWE 进行 JSON。以下是我正在做的步骤。
我有 Java 密钥库,通过它我导出了用于加密的证书和用于解密的私有证书。
用于加密
对于解密:
预期明文:{ "Param1":"param1" };
但结果是:[object Object]
如您所见,我尝试将 Buffer 数据转换为字符串,但仍未显示预期结果。任何人都可以在我错的地方帮助我。
谢谢
问候 MJ
encryption - 如何为 JWE 实现生成内容加密密钥
我正在尝试在 Java 中学习和实现 JWE 以获取问题陈述。我试图了解如何使用某种算法(比如说 RSA-PKCS1_1.5)生成内容加密密钥。
我知道如何使用密钥生成器生成一对密钥,然后使用公钥进行加密,使用私钥进行解密。另外,我知道如何通过提供声明来创建简单的 JWT 令牌以及如何对其进行签名。我正在尝试按照以下步骤操作:
消息加密过程如下:
生成随机内容加密密钥 (CEK)。CEK 的长度必须至少等于所需加密密钥的长度,并且必须随机生成。
为收件人加密 CEK
生成随机 IV(如果算法需要)。
如果包含 zip 参数,则压缩明文。
将(压缩的)明文序列化为位串 M。
使用 CEK 和 IV 加密 M 以形成位串 C。
将 Encoded JWE Ciphertext 设置为等于 C 的 base64url 编码表示。
创建一个包含使用的加密参数的 JWE 标头。
Base64url 对 JWE 标头的 UTF-8 表示的字节进行编码,以创建编码的 JWE 标头。
三个编码部分合在一起就是加密的结果。
openssl - 使用 Openssl 解密 JWE 的内容加密密钥
我有一个 JWE,我想用 openssl(和其他命令行)解密内容加密密钥(cek)
这里是我的 JWE:
所以现在我已经检索了这些元素:
临时公钥 (EPK):
私钥:
来自私钥和 EPK(base 64)的共享密钥:
base 64 中的密钥加密密钥 (kek):
解密的 JWE 标头:
现在我尝试解密 CEK: IFiUOn11TxTgnYWCA2rJLTYV3_r2n_qW 。但我有一些错误。
这里的命令:
base64 kek
等于_jy5VPMvuVJTxTwtf1rhUKA==
和 encrypted-cek.64 包含IFiUOn11TxTgnYWCA2rJLTYV3/r2n/qW
(我已将 cek 从 base64url 转换为 base64)
这里的错误:
我忘记了什么。
java - 为什么在 Java 和 Go 之间解密 JWE 时会出错
我无法在 Java 和 Go 中使用 Curve P521、ECDH-ES 和 A256GCM 对曲线 X、Y 和 D 使用相同的值进行加密/解密。当我尝试从 Go 中获取加密值并在 Java 中解密时失败,反之亦然,失败并显示:
Go: square/go-jose: 密码原语错误
Java:AES/GCM/NoPadding 解密失败:mac check in GCM 失败
为什么这不起作用?
!!!更新!!!我还添加了代码来解析 JWK 以在 Go 中创建我的 KeyPair。(我使用了java程序并将密钥对打印到json)。
我注意到,有时 Java 加密值可以在 Go 中解析,有时却不能。我认为 GCM 解密中的某些内容在 Go 中可能无法正常工作。
所示代码演示了在该语言中的工作。注释掉的字符串是从其他语言运行的结果
encryption - 使用 JOSE JWE 加密大文件
我需要以安全有效的方式加密一些 < 1GB 的较大文件。为此目的使用 JOSE JWE 库是个好主意吗?您还有其他选择可以推荐吗?
谢谢,西蒙
java - 使用 jose4j 的 ECDH + JWE 加密/解密
我正在尝试在 Android (Java) 中与 JWE 一起实现 ECDH 加密/解密。
我发现jose4j和Nimbus JOSE库旨在满足我的所有需求,但似乎比我想象的更具挑战性。
如果有人熟悉,那就是 3D Secure 2.0 ......
在下面的规范中:
- SDK =本地端
- DS = 目录服务器(另一端)
接下来是规格:
- 给定:P(DS) - EC 公钥(以 PEM 格式提供,可以转换为 PublicKey 或 JWK)
- 生成一个新的临时密钥对 (Q(SDK), d(SDK))
- 根据 JWA (RFC7518) 在 Direct Key Agreement 模式下使用曲线 P-256、d(SDK) 和 P(DS) 进行 Diffie-Hellman 密钥交换过程以生成 CEK。此版本规范支持的参数值为:
- “alg”:ECDH-ES
- “apv”:目录服务器 ID
- “epk”:P(DS),inJSONWebKey(JWK)格式{“kty”:“EC”,“crv”:“P-256”}
- 所有其他参数:不存在
- CEK:"kty":oct-256bits
- 生成 128 位随机数据作为 IV
- 使用 CEK 和 JWE 紧凑序列化根据 JWE (RFC7516) 加密 JSON 对象。此版本规范支持的参数值为:
- “alg”:目录
- “epk”:Q(SDK)作为{“kty”:“EC”,“crv”:“P-256”}
- “enc”:“A128CBC-HS256”或“A128GCM”
- 所有其他参数:不存在
- 如果算法是 A128CBC-HS256,则使用完整的 CEK,或者如果算法是 A128GCM,则使用 CEK 的最左边 128 位。
- 删除临时密钥对 (Q(SDK),d(SDK))
- 将生成的 JWE 作为 SDK 加密数据提供给 3DS 服务器
如果有人已经实现了这个确切的规范并且可以分享代码,那就太棒了!!
在 jose4j 的示例中有一个使用 ECDH 创建 JWT 的示例:
https ://bitbucket.org/b_c/jose4j/wiki/JWT%20Examples (最后一个示例,标题为“生产和使用嵌套的(签名和加密的)JWT ”)。
但是这个例子并不是我所需要的。当我需要加密文本时,它会创建一个令牌。
从上面规范中的 "CEK:"kty":oct-256bits" 开始,我不明白该怎么做。
这是我使用 Nimbus lib 的代码(到目前为止):
这是雨云输出:
nimbus_encrypt: jwe = {"epk":{"kty":"EC","crv":"P-256","x":"AS0GRfAOWIDONXxaPR_4IuNHcDIUJPHbACjG5L7x-nQ","y":"xonFn1vRASKUTdCkFTwsl16LRmSe-bAF8EO4-mh1NYw"} ,"apv":"RjAwMDAwMDAwMQ","enc":"A128CBC-HS256","alg":"ECDH-ES"}
nimbus_encrypt: serializedJwe = eyJlcGsiOnsia3R5IjoiRUMiLCJjcnYiOiJQLTI1NiIsIngiOiJBUzBHUmZBT1dJRE9OWHhhUFJfNEl1TkhjRElVSlBIYkFDakc1TDd4LW5RIiwieSI6InhvbkZuMXZSQVNLVVRkQ2tGVHdzbDE2TFJtU2UtYkFGOEVPNC1taDFOWXcifSwiYXB2IjoiUmpBd01EQXdNREF3TVEiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiRUNESC1FUyJ9..Pi48b7uj3UilvVXKewFacg.0sx9OkHxxtZvkVm-IENRFw.bu5GvOAwcZxdxaDKWIBqwA
这是我的代码(到目前为止,使用@Brian-Campbell 的答案)使用 jose4j lib:
这是 jose4j 输出:
jose4j_encrypt: jwe = JsonWebEncryption{"alg":"ECDH-ES","enc":"A128CBC-HS256","apv":"RjAwMDAwMDAwMQ","epk":{"kty":"EC","x" :"prvyhexJXDWvPQmPA1xBjY8mkHEbrEiJ4Dr-7_5YfdQ","y":"fPjw8UdfzgkVTppPSN5o_wprItKLwecoia9yrWi38yo","crv":"P-256"}}
jose4j_encrypt: serializedJwe = eyJhbGciOiJFQ0RILUVTIiwiZW5jIjoiQTEyOENCQy1IUzI1NiIsImFwdiI6IlJqQXdNREF3TURBd01RIiwiZXBrIjp7Imt0eSI6IkVDIiwieCI6InBydnloZXhKWERXdlBRbVBBMXhCalk4bWtIRWJyRWlKNERyLTdfNVlmZFEiLCJ5IjoiZlBqdzhVZGZ6Z2tWVHBwUFNONW9fd3BySXRLTHdlY29pYTl5cldpMzh5byIsImNydiI6IlAtMjU2In19..gxWYwFQSOqLk5HAgs7acdA.mUIHBiWpWSlQaEOJ_EZGYA.eiTe-88fw-Jfuhji_W0rtg
可以看出,最终结果中的“alg”标头是“ECDH-ES”,而不是“dir”。
如果我要实现通信的双方就足够了,但是有了这个规范,这里似乎缺少许多配置......
使用 jose4j 的代码更长,似乎更可配置,但我无法构建足够有价值的东西来发布在这里。
对我来说主要缺少的部分是如何从上面的规范生成 CEK。
谢谢你。
编辑
在上面添加了 jose4j 代码并添加了输出...
swift - 来自公钥字符串的 Swift 4 中的 RSA 加密函数
我的最终目标是创建一个 JWE 字符串,给定 iOS 的公钥。
为了让自己更轻松,我已经非常紧迫地分解了我的步骤,我需要使用 RSA 加密从密钥和公钥字符串创建一个加密密钥。
我在堆栈溢出和互联网的其他地方尝试了很多东西。由于各种原因,他们只是没有成功。
我被一些Objective C代码指导:
我目前在这个功能点:
据此,我假设有一个 rsaEncrypt 函数可以接受密钥和公钥。
我有权访问的公钥如下所示:
在 Internet 上找到的示例将公钥作为 SecKey 类型处理。这是我执行加密的第一个障碍。
- 如果必须转换,如何将字符串转换为 SecKey?
- 我的 rsaEncrypt 函数应该做什么?
我希望在执行加密后输出是一个加密的密钥。
更新:另一种变体,发送的一个公钥也如下所示: