javascript - native-crypto 加密抛出 DOMException
问题描述
我正在使用这个native-crypto
包,它是一个用于跨平台加密的 API(所以 web 和 node.js)。
let crypto = require("native-crypto");
我已经生成了一个公钥/私钥对...
keyPair = crypto.generate('P-256');
...我正在尝试加密这样的消息:
let message = "Hello, World!";
let encrypted = crypto.rsa.encrypt(keyPair.privateKey, message);
但是,这不起作用,我收到DOMException
(在浏览器环境中)没有更多详细信息。
我该如何解决这个问题?
可能的问题:
- 也许我使用了不正确的功能组合
- 这可能是因为我生成的密钥
key_ops
只包含["sign"]
但没有加密。
解决方案
让我们从异常开始......由于某种原因,您没有看到错误消息。
Uncaught (in promise) DOMException: The required JWK member "kty" was missing
异步与同步
第一个错误是因为您尝试同步使用异步API 。
您需要在生成行上添加await
关键字:keyPair
keyPair = await crypto.generate('P-256');
如果没有await
关键字,则分配一个 PromisekeyPair
而不是包含kty
.
错误的密钥类型
一旦你解决了这个问题,你会看到另一个错误:
The JWK "kty" member was not "RSA"
这是因为 ECDSA 密钥与 RSA 加密一起使用。
还有一个问题
一旦你修复它,你会看到另一个错误
The JWK "key_ops" member was inconsistent with that specified by the Web Crypto call. The JWK usage must be a superset of those requested
我帮不上这个忙。我怀疑这是native-crypto
. 您可能需要在他们的github repo上提交错误报告。这是一个仅使用 Web Crypto API 的大致等效示例。
const crypto = window.crypto.subtle;
async function main() {
const keyPair = await crypto.generateKey(
{
name: "RSA-OAEP",
modulusLength: 4096,
publicExponent: new Uint8Array([1, 0, 1]),
hash: "SHA-256"
},
true,
["encrypt", "decrypt"]
);
let message = "hello";
message = new TextEncoder().encode(message);
const encrypted = await crypto.encrypt({ name: "RSA-OAEP" }, keyPair.publicKey, message);
console.log(encrypted);
}
main()
推荐阅读
- django - Django REST Serializer 使用错误的模型进行序列化
- python - python文件写入程序运行时如何更新桌面上的文件大小
- javascript - 使用 d3.js 更新表数据
- c# - C#捕获从不在进程中的函数返回的异常?
- r - 如何设置仅在输入 3 时才显示集合向量的函数?
- javascript - 如果 URI 没有改变,例如在单页应用程序上,如何检测用户是否在新页面上?
- angular - Angular Kendo UI 全局访问
- php - 内连接循环通过
- git - 如何 git rebase 从另一个分支直接到 master 分支?
- javascript - 受控数字比例映射