我想在节点服务器和浏览器之间实现RSA加密。到目前为止,我已经在服务器上使用了node-rsa:
const RSA = require("node-rsa")
const key = new RSA({b: 512});
console.log(key.exportKey("public"))它看起来像这样:
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMSZQk6XJbPTr/0bY1OYQUPkUXfsC4K8
iPywjTpIDLZhw341cxPaiI0dxkP/GLvG+03xqboFMRFJbs4L5aXA9x0CAwEAAQ==
-----END PUBLIC KEY-----我如何在浏览器中做同样的事情。
附言:我试过了node put,我想不出如何产生与SubtleCrypto -rsa相似的格式。
发布于 2021-11-22 12:48:17
您看到的是一个PEM编码的SubjectPublicKeyInfo或简称为"spki“。有用的是,official SuptleCrypto API提供了一个示例代码片段,展示了如何创建二进制结构并将其转换为PEM格式。
node-rsa NodeJS库错误地调用了这个'pkcs8',或者更具体地说是'pkcs8-public' (至少,这是我从他们的文档中发现的)。你可以投票的I've created bug report 208。
发布于 2021-11-23 07:52:55
我在客户端找到了这段代码,它可以生成RSA对并导出公钥(由于某种原因,它不适用于私有密钥)。
async function exportCryptoKey(key) {
const exportedAsBase64 = window.btoa(String.fromCharCode.apply(null, new Uint8Array(await window.crypto.subtle.exportKey("spki", key))))
return `-----BEGIN PUBLIC KEY-----\n${exportedAsBase64}\n-----END PUBLIC KEY-----`
}
async function main(){
keyPair = await window.crypto.subtle.generateKey({
name: "RSA-OAEP",
modulusLength: 2048,
publicExponent: new Uint8Array([1, 0, 1]),
hash: "SHA-256",
}, true, ["encrypt", "decrypt"])
console.log(await exportCryptoKey(keyPair.publicKey))
}
main()https://stackoverflow.com/questions/70056340
复制相似问题