- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 node-jose v0.11.0 ( https://www.npmjs.com/package/node-jose ) 进行 JWK 和 JWE 操作。我有一个 JWK 格式的 RSA key ,我可以将其加载到 JWK keystore 中并再次提取。但是,当我尝试加密任何内容时,我会遇到“error2”、“不支持的算法”。 RSA 怎么可能是不受支持的算法?
import * as jose from "node-jose";
const webkey = {
"keys": [
{
"kty": "RSA",
"e": "AQAB",
"kid": "a024254d-0321-459f-9530-93020ce9d54a",
"key_ops": [
"encrypt"
],
"n": "jkHgYN98dlR2w7NX-gekCWaCdbxs7X4XXh52DVQrK--krwUYqRbBIUEw1bV8KX0ox6TLt-e6wpYsYYFUItSd5ySqohHRMq1IhyE2zpEC95BA9V7VrFUYnczf1bd5c-aR079aoz5JPXfqx01TzNfxWBb04SlRjsmJeY1v6JrDUI5U0FSOmnJTb3tSS6Szrvi_qOyViYp4v9V2_OVYy45kF_LQQy-pr-kP4gapXL235cieeTW6UvkhzaPT2D-JKyzVjjjgnfRXr8Ox9I9c4wpef2-5nPPeafB5EnOMpJE11KzO_8xxiTGUywPPLQagBvY35gkhQbYS2dv3NGIVSLZHFw"
}
]
};
console.log("webkey", webkey);
//generate key store from public JWK
jose.JWK.asKeyStore(webkey)
.then((result) => {
console.log("Key Store", JSON.stringify(result.toJSON()));
let keyStore = result;
//get the key to encrypt
const encryptionKey: jose.JWK.Key = keyStore.get(webkey.keys[0].kid);
const output = jose.util.base64url.encode("Hello World");
const output2 = jose.util.asBuffer(output);
//encrypting content
jose.JWE.createEncrypt(encryptionKey)
.update(output2)
.final()
.then((jweInGeneralSerialization) => {
console.log("Encryption result", JSON.stringify(jweInGeneralSerialization));
}, (error) => {
console.log("error2", error.message);
});
}, (error) => {
console.log("error1", error.message);
})
输出如下:
'webkey', Object{keys: [Object{kty: ..., e: ..., kid: ..., key_ops: ..., n: ...}]}
'Key Store', '{"keys":[{"kty":"RSA","kid":"a024254d-0321-459f-9530-93020ce9d54a","key_ops":["encrypt"],"e":"AQAB","n":"jkHgYN98dlR2w7NX-gekCWaCdbxs7X4XXh52DVQrK--krwUYqRbBIUEw1bV8KX0ox6TLt-e6wpYsYYFUItSd5ySqohHRMq1IhyE2zpEC95BA9V7VrFUYnczf1bd5c-aR079aoz5JPXfqx01TzNfxWBb04SlRjsmJeY1v6JrDUI5U0FSOmnJTb3tSS6Szrvi_qOyViYp4v9V2_OVYy45kF_LQQy-pr-kP4gapXL235cieeTW6UvkhzaPT2D-JKyzVjjjgnfRXr8Ox9I9c4wpef2-5nPPeafB5EnOMpJE11KzO_8xxiTGUywPPLQagBvY35gkhQbYS2dv3NGIVSLZHFw"}]}'
'error2', 'unsupported algorithm'
更新我在实际代码中挖掘了一下,发现在“basekey.js”中抛出了错误,因为库的算法是空的。
Object.defineProperty(this, "encrypt", {
value: function(alg, data, props) {
// validate appropriateness
if (this.algorithms("encrypt").indexOf(alg) === -1) {
console.log("Algorithm USED", alg
);
console.log("All algorithms", this.algorithms("encrypt"))
return Promise.reject(new Error("unsupported algorithm"));
}
这里的输出是:
'Algorithm USED', 'A128CBC-HS256'
'All algorithms', []
最佳答案
我在另一个问题中添加了一个示例: node-jose explanation / example?
我在研究证明中使用了 node-jose,为了反射(reflect)我的 c# 代码,我只在我的服务器(用 c# 编写)上创建用于解密和验证的签名和加密 token 。
I need to use symetric secret key or asymetric public private key pair ?
我使用 RSA key 进行非对称签名和 key 包装内容的对称加密细节。内容加密的加密算法是对称算法。 node-jose 包生成了对称 key 。 Key Wrap 算法加密了对称 key 。
我的 C# 代码解密并验证 token 签名。请注意:我使用包的功能来完成所有工作。
这是我的 runkit 笔记本,用于我的检查:
用于签名 (JWS) https://runkit.com/archeon2/5bd66a8e7ee3b70012ec2e39
用于加密 (JWE) https://runkit.com/archeon2/5bd6736ff36b39001313262a
在我的决赛中,我将两者结合起来,创建了一个签名 token ,然后使用输出作为加密 token (JWS + JWE) 的有效负载。我成功地使用 c# 服务器代码解密和验证创建的 token 。
JWS + JWE:https://runkit.com/archeon2/jws-jwe-integration
How i need to generate and where i need to store keys in my server node app to then allow me to sign and verify my tokens ?
var store = jose.JWK.createKeyStore();
await store.generate("RSA",2048,{alg:"RS256", key_ops:["sign", "decrypt", "unwrap"]});
lkey = (await store.get());
var key = lkey.toJSON(); //get public key to exchange
key.use = "sig";
key.key_ops=["encrypt","verify", "wrap"];
var pubKey = await jose.JWK.asKey(key);
key = null;
Keystore 可以序列化为 JSON,所以我的想法是将其存储在 session 存储或浏览器的本地存储中。然后检索 JSON 表示并读入 keystore 。
var store= await jose.JWK.asKeyStore({"keys":[{"kty":"RSA","kid":"h9VHWShTfENF6xwjF3FR_b-9k1MvBvl3gnWnthV0Slk","alg":"RS256","key_ops":["sign","decrypt","unwrap"],"e":"AQAB","n":"l61fUp2hM3QxbFKk182yI5wTtiVS-g4ZxB4SXiY70sn23TalKT_01bgFElICexBXYVBwEndp6Gq60fCbaBeqTEyRvVbIlPlelCIhtYtL32iHvkkh2cXUgrQOscLGBm-8aWVtZE3HrtO-lu23qAoV7cGDU0UkX9z2QgQVmvT0JYxFsxHEYuWBOiWSGcBCgH10GWj40QBryhCPVtkqxBE3CCi9qjMFRaDqUg6kLqY8f0jtpY9ebgYWOmc1m_ujh7K6EDdsdn3D_QHfwtXtPi0ydEWu7pj1vq5AqacOd7AQzs4sWaTmMrpD9Ux43SVHbXK0UUkN5z3hcy6utysiBjqOwQ","d":"AVCHWvfyxbdkFkRBGX225Ygcw59fMLuejYyVLCu4qQMHGLO4irr7LD8EDDyZuOdTWoyP7BkM2e7S367uKeDKoQ6o1LND2cavgykokaI7bhxB0OxhVrnYNanJ1tCRVszxHRi78fqamHFNXZGB3fr4Za8frEEVJ5-KotfWOBmXZBvnoXbYbFXsKuaGo121AUCcEzFCGwuft75kPawzNjcdKhItfFrYh45OQLIO08W0fr_ByhxzWMU7yFUCELHSX5-4GT8ssq1dtvVgY2G14PbT67aYWJ2V571aSxM8DTwHrnB9tI8btbkXWt9JyVoQq13wDdo5fVN-c_5t07HBIaPoAQ","p":"8nLGa9_bRnke1w4paNCMjpdJ--eOUpZYbqEa8jnbsiaSWFwxZiOzUakIcpJ3iO0Bl28JEcdVbo7DE7mZ4M3BkOtm577cNuuK8243L7-k1a71X_ko2mQ3yF4rG2PzWAH_5P4wca1uk0Jj3PmhbkXDI6f_btm1X7Vw_U1K6jRhNbE","q":"oCe94Bed1Wzh-xgNq0hz52Z6WLf9eQlNxLzBbYkpLc_bGj9vMeGNO10qdxhWPi8ClkW9h5gBiFEk2s6aEWYRvIoZjrMYXD7xzyTNC5zcsikjNhM3FVj-kVdqUJy25o9uqgn2IwTvQr5WSKuxz37ZSnItEqK5SEgpCpjwEju_XhE","dp":"jAe2ir-0ijOSmGtZh2xMgl7nIFNRZGnpkZwDUDwSpAabJ-W3smKUQ2n5sxLdb3xUGv7KojYbJcvW6CGeurScQ_NycA9QaXgJvSe_QBjUP4bZuiDSc7DGdzfMdfl4pzAgeEZH_KBK6UrDGvIjRumMF6AEbCXaF_lX1TU7O6IdM0E","dq":"fDU2OjS2sQ5n2IAYIc3oLf-5RVM0nwlLKhil_xiQOjppF9s4lrvx96dSxti2EjYNUJQ34JBQJ_OenJ_8tx-tA8cq-RQHAYvDp75H1AjM1NO4vjh60PCbRgdAqdJQu1FkJzXgkdpC4UWSz3txRJaBWQ5hzIEtJ1Tnl5NzJQD3crE","qi":"3EoKqhKh5mwVGldSjwUGX7xnfQIfkQ4IETsQZh9jcfOFlf9f8rT2qnJ7eeJoXWlm5jwMnsTZAMg4l3rUlbYmCdg10zGA5PDadnRoCnSgMBF87d0mVYXxM1p2C-JmLJjqKhJObr3wndhvBXUImo_jV6aHismwkUjc1gSx_b3ajyU"},{"kty":"RSA","kid":"h9VHWShTfENF6xwjF3FR_b-9k1MvBvl3gnWnthV0Slk","use":"verify","alg":"RS256","key_ops":["encrypt","verify","wrap"],"e":"AQAB","n":"l61fUp2hM3QxbFKk182yI5wTtiVS-g4ZxB4SXiY70sn23TalKT_01bgFElICexBXYVBwEndp6Gq60fCbaBeqTEyRvVbIlPlelCIhtYtL32iHvkkh2cXUgrQOscLGBm-8aWVtZE3HrtO-lu23qAoV7cGDU0UkX9z2QgQVmvT0JYxFsxHEYuWBOiWSGcBCgH10GWj40QBryhCPVtkqxBE3CCi9qjMFRaDqUg6kLqY8f0jtpY9ebgYWOmc1m_ujh7K6EDdsdn3D_QHfwtXtPi0ydEWu7pj1vq5AqacOd7AQzs4sWaTmMrpD9Ux43SVHbXK0UUkN5z3hcy6utysiBjqOwQ","use":"sig"}]});
How can i know which one use between OCT, EC, RSA etc ?
为此,您的 token 所服务的需求可能会决定这一点。我需要接收者是可以看到内容的人,所以我选择了 RSA,用于非对称 key 。伪造有点难。
这些笔记本在某种程度上是一项正在进行的工作。请仔细阅读,因为这是我的解释以及我如何计算出我需要的东西。我希望他们能提供一些指导。
关于node.js - 如何使用 node-jose 生成加密的 JWE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48659883/
Ed25519 PEM key 对生成如下: -----BEGIN PRIVATE KEY----- NC4CAQAwBQYcK2VwBCIEIIWUb0/MoKaBxQkmmPlHIGyPfDQb/
我正在尝试使用 node-jose 实现简单的 JOSE encrypt 和 decrypt 函数. 我的代码如下(使用Node 8.2.1编写) const { JWE } = require('n
我正在使用 jose 进行 python jwe 加密。 这是我的示例代码 import jose from time import time from Crypto.PublicKey import
我正在尝试使用 node-jose验证我的 JWT 的签名。我知道 secret ,但无法将此 secret 转换为用于验证的 JWK。 这是一个示例,说明我如何尝试使用我的 secret 创建我的
我正在使用 node-jose v0.11.0 ( https://www.npmjs.com/package/node-jose ) 进行 JWK 和 JWE 操作。我有一个 JWK 格式的 RSA
对示例代码中应用的概念 有疑问“带有 RSA 加密的 JSON 网络 token (JWT)” 引用:http://connect2id.com/products/nimbus-jose-jwt/ex
我正在尝试使用 SpringBoot 实现 Oauth2 授权服务器 guide作为引用。 我的 keystore 只有一个 key 。我已经成功创建了一个 JWToken(我可以在 jwt.io 上
我正在尝试创建 JWE 解密函数,但无法确定如何使用 Go Jose 接口(interface)来执行此操作。我已使用密码进行加密(我更喜欢此用例的密码): token := jwt.NewW
我使用 Nimbus JOSE + JWT 对每个资源请求在服务器和客户端之间来回传递 token 创建 JWT token 的代码: public class TokenProvider {
我正在尝试按照此处提供的示例创建嵌套的 json JWT http://connect2id.com/products/nimbus-jose-jwt/examples/signed-and-encr
我查看了 python-jose 和 jose,但似乎都不支持加密已签名的 JWT。例如,“jose”库支持单独签名和加密,无需嵌套。 我是否遗漏了什么,比如在库外嵌套 JWT 可能相当容易?如果是这
我对 python 有点陌生,之前从未使用过它来验证 jwt token 。 我正在编写一个 lambda 函数。我确信这个问题很简单,但似乎无法解决。 我不断收到此错误: { "errorTyp
这是我在 ubuntu 20.x 上为 JOSE/NODEJS (14.16) 应用程序生成 EdDSA 25519 key 对的命令: $ssh-keygen -o -a 100 -t ed2551
我正在努力理解如何使用 npm jose 模块( https://www.npmjs.com/package/jose )在我的 Node 应用程序中创建和验证签名的 JWT token 。我的场景是
我有一个函数,它接收一个 token ,对其进行解码,然后使用有效负载来执行一些逻辑。我想用我操纵的声明来生成 token 以测试该函数。 我从 https://mkjwk.org/ 生成了一个 ke
作为快速概述,我正在尝试使用 https://github.com/dvsekhvalnov/jose-jwt 通过 C# 生成 ES256 算法 -JWT token 图书馆。 如说明所述: ES2
这个问题在这里已经有了答案: Using the variable "name" doesn't work with a JS object (4 个答案) 关闭 6 年前。 当我在控制台中运行 v
如果我搜索“Jose”,结果为 0。如果我搜索“Josè”,“Jôse”也不会给出任何结果。 select name from TblName where name = 'Jose' or name
我正在尝试在 .NET 中生成 JWT token 。起初,我尝试使用“System.IdentityModel.Tokens.Jwt”,但它在 token 验证期间引起了问题,所以我切换到“jose
我正在尝试整合 Javascript Object Signing and Encryption (JOSE) jose使用我的 iOS 应用程序。 引用This Sample code : hong
我是一名优秀的程序员,十分优秀!