Node.js和webcrypto之间的RSA加密

时间:2015-11-04 21:11:34

标签: javascript node.js cryptography

我真的坚持这个!我想做什么:

  • 使用ursa / webcrypto
  • 生成RSA密钥对
  • 通过线路将公钥作为PEM发送
  • 在另一端导入公钥,并用它加密一些文本
  • 发回密文并使用私钥在另一端解密

现在不知怎的,如果我尝试用ursa做加密部分,我会在浏览器中得到一个未定义的DOMException,或者当我在浏览器中进行加密时,我在Node.js中收到此错误:

Missing error handler on `socket`.
Error: error:040A1079:rsa routines:RSA_padding_check_PKCS1_OAEP_mgf1:oaep decoding error
    at Error (native)
    at Object.decrypt (/home/jeroen/projects/crypto-nodebrowser/node_modules/ursa/lib/ursa.js:358:33)
    at Socket.<anonymous> (/home/jeroen/projects/crypto-nodebrowser/server.js:34:50)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at Socket.onevent (/home/jeroen/projects/crypto-nodebrowser/node_modules/socket.io/lib/socket.js:330:8)
    at Socket.onpacket (/home/jeroen/projects/crypto-nodebrowser/node_modules/socket.io/lib/socket.js:290:12)
    at Client.ondecoded (/home/jeroen/projects/crypto-nodebrowser/node_modules/socket.io/lib/client.js:193:14)
    at Decoder.Emitter.emit (/home/jeroen/projects/crypto-nodebrowser/node_modules/component-emitter/index.js:134:20)
    at Decoder.add (/home/jeroen/projects/crypto-nodebrowser/node_modules/socket.io-parser/index.js:247:12)

我在https://github.com/jvanveen/crypto-nodebrowser处制作了一个显示问题的最小代码示例。欢迎任何帮助!

2 个答案:

答案 0 :(得分:0)

您能告诉我们您正在运行的代码及其运行的浏览器吗?

某些浏览器可能只使用SHA-1进行RSA-OAEP,但是从您提供的简要说明中解决了问题。我认为需要更多细节。

答案 1 :(得分:0)

好的,我终于明白了。 Openssl使用SHA1硬编码OAEP填充,因此如果您想使用RSA-OAEP-256,则ursa的openssl绑定不适合。我找不到使用node-rsa工作的方法,但Node-forge在这里非常简单。只需使用:

var encrypted = publicKey.encrypt(bytes, 'RSA-OAEP', {
    md: forge.md.sha256.create()
});