2017-08-03 3 views
2

私はnode-joseを使用して簡単にJOSEencryptdecryptの機能を実装しようとしています。次のようにnode-joseを使用すると、暗号化したばかりのデータをどのように復号化できますか?

私のコードは、(ノード8.2.1を使用して書かれた)

const { JWE } = require('node-jose'); 

const jose = (publicKey, privateKey) => { 
    async function encrypt(raw) { 
    if (!raw) throw new Error('Missing raw data.') 
    const buffer = new Buffer(JSON.stringify(raw)); 
    return JWE.createEncrypt(publicKey).update(buffer).final(); 
    } 

    async function decrypt(encrypted) { 
    if (!encrypted) throw new Error('Missing encrypted data.') 
    const buffer = new Buffer(JSON.stringify(encrypted)); 
    return JWE.createDecrypt(privateKey).decrypt(buffer); 
    } 

    return { encrypt, decrypt } 
} 

module.exports = jose; 

Iはgenerate-rsa-keypairを使用してRSA鍵ペアを生成します。だから、物事の暗号化側が罰金

const { JWK } = require('node-jose'); 
const keygen = require('generate-rsa-keypair'); 
const jose = require('./src/utils/jose'); 

const rawKeys = keygen(); 

const makeKey = pem => JWK.asKey(pem, 'pem'); 

async function start() { 
    const publicKey = await makeKey(rawKeys.public) 
    const privateKey = await makeKey(rawKeys.private) 

    const raw = { 
    iss: 'test', 
    exp: new Date().getTime() + 3600, 
    sub: { 
     test: 'This is a test', 
    }, 
    }; 

    const { encrypt, decrypt } = jose(publicKey, privateKey); 

    return encrypt(raw).then(encrypted => decrypt(encrypted)); 
} 

return start().then((result) => { 
    console.log('decrypted', result) 
}, (err) => { 
    console.error(err); 
}); 

の作品encrypted結果は

{ 
    recipients: [ { encrypted_key: 'ciNiK6Unq30zCAXxIl2Dx9b8bZAi79qbpL1yUCwTFnSghFLrIZ11_D2ozt5on3r3ThUu96oDLZPcNShbqWPMV49NvQAsSNGdemhgzmTt3Lf3rJn1YiqvJvqf5NIXdmzjdoEZi-d9224mGpZGVKtIIFeT6-0hYgm5zNqq_aF_X2jy5IiF-mAGspNdXIk_KXPrTVbnU-XL9J5aAoG2Lp51Te1WzGA4Fjg4Ve5ZTzH6TLlQ5R5Ob_14liK-INrSi3armwXrtMgJcTmI_4oBtORtZp8AjaXzecFO_GzifvRVCSKx2vmpy9KaECpskMhZBHVx9RX9cvGKh7hq3Y7vsUucZw' } ], 
    protected: 'eyJhbGciOiJSU0EtT0FFUCIsImtpZCI6IldLWS1ONDRXM2RnanA4U2ZxSlp3TldqV3AzUG1XZ29UczhjRDh3eWNSUWciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0', 
    iv: 'wvqir2ewtQPfDHQtzl6IUg', 
    ciphertext: 'ZwIrL_3739LI17rh3gWDUA6lXIL7ewkSh54FO_RwumC0qh9B0DcAr8RyXsfPbW19cV4u7SbZNSRP6B8qNOTy-2iENlqBISfE_kolDt8g5sg', 
    tag: 'z8nwrJfRgOi1hYMBI9lGeQ' 
} 

が、私は、私は

Error: no key found 
    at processKey (node_modules/node-jose/lib/jwe/decrypt.js:157:22) 

を得ることを解読しようとしているこのコードを経由してテスト

node-joseの使用例はごくわずかですので、私は次のことが分かりません

  1. 私は私が秘密鍵で解読するべきであると仮定しています。しかしそれは単なる仮定です。公開/非公開鍵ペアの使用例はありません。単一の鍵だけです。
  2. 私は、暗号化の結果がストリンジェントになってバッファに変換され、decryptに渡されたと仮定していますが、そうでない場合もあります。

これは実際にどのように機能しますか?

+0

ここで使われているとどのように私は1つを選んでくださいアルゴリズムは何ですか? –

+0

この例では、https://www.npmjs.com/package/generate-rsa-keypair –

答えて

0
  1. 公開鍵/秘密鍵のペアを使用して、privateキーを解読するために使用され、publicキーを暗号化するために使用されます。

  2. JWEDecrypter.decrypt()への入力は、JWEEncrypter.final()からの約束です。

はあなたに decrypt機能を変更

async function decrypt(encrypted) { 
    if (!encrypted) throw new Error('Missing encrypted data.') 
    return JWE.createDecrypt(privateKey).decrypt(encrypted); 
} 
+0

からRSAを使用しました。私はあなたの答えに基づいてそれを働かせました。 –

+0

私のためにそれは動作していません、以下のコードを見つけてください –

関連する問題