2015-11-04 125 views
0

我真的被困在這!我想要做的事:用小熊座/ webcrypto Node.js和webcrypto之間的RSA加密

  • 將公鑰作爲PEM在導線
  • 導入另一端的公鑰

    • 生成RSA密鑰,並加密一些文本它
    • 發回的密文,並使用私鑰

    現在不知何故,我得在瀏覽器中使用一個未定義的拋出:DOMException解密它的另一端,如果我試圖用大熊做加密的一部分,或者我得到這個錯誤中的R的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最小的代碼示例顯示了問題。對此有任何幫助,歡迎!

  • 回答

    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() 
     
    });

    0

    你能告訴我們你正在運行的代碼和它運行的瀏覽器嗎?

    某些瀏覽器可能只使用SHA-1來執行RSA-OAEP,但是從您給出的簡要描述中解密出現問題。我認爲需要更多細節。

    +0

    嗨,我有一個最近的Chromium版本測試。當我運行服務器並打開頁面時,會執行一些有點駭人聽聞的測試用例。此時第一個測試用例通過:它能夠在node.js上生成密鑰對,將其轉換爲jwk,將jwk發送到瀏覽器,webcrypto能夠導入jwk並將jwk導出回來,jwk被髮送回服務器和服務器確認jwk/pem仍然相同。 第二個測試用例失敗。它首先測試密鑰是否可用於本地加密/解密,然後將密文發送到服務器。在服務器上,我收到oaep錯誤... – Phrearch

    +0

    NodeRSA和Ursa都會生成一個關於OAEP填充的類似錯誤: 錯誤:錯誤:040A1079:rsa例程:RSA_padding_check_PKCS1_OAEP_mgf1:oaep解碼錯誤 – Phrearch

    +0

    從ursa/nodersa導入的webcrypto密鑰具有稍有不同moduluslength比生成的一個: keypair.private.algorithm.modulusLength => 2047 keypair.generated.privateKey.algorithm.modulusLength => 2048 keypair.generated.privateKey.algorithm.publicExponent => [1,0, 1] keypair.private.algorithm.publicExponent => [1,0,1] – Phrearch