2015-11-20 16 views
6

के साथ संदेश डिक्रिप्ट करने का प्रयास करते समय नोड-आरएसए त्रुटियां तो मैं एक वेबसाइट (एक असाइनमेंट के लिए) बनाने के लिए node-rsa और jsencrypt के साथ जावास्क्रिप्ट के साथ नोड का उपयोग करने का प्रयास कर रहा हूं जहां जावास्क्रिप्ट क्लाइंट द्वारा उत्पन्न सार्वजनिक कुंजी प्राप्त होती है सर्वर (नोड-आरएसए), उपयोगकर्ता द्वारा दर्ज किया गया संदेश (जेसेक्रिप्ट) एन्क्रिप्ट करता है, इसे सर्वर पर भेजता है और सर्वर को इसे डिक्रिप्ट करने के लिए सर्वर (node-rsa) प्राप्त करता है। कुंजी की पीढ़ी काम करती है, एन्क्रिप्शन काम करता है हालांकि डिक्रिप्शन नहीं करता है। जब मैं नोड स्क्रिप्ट मैं एन्क्रिप्शन के लिए निम्न कार्य करें ...निजी कुंजी

var NodeRSA = require('node-rsa'); 
var myDecrypter = new NodeRSA({b: 512}); 

शुरू क्लाइंट कुंजी अनुरोध करता है (मैं एक्सप्रेस उपयोग कर रहा हूँ) के बाद भाग गया है।

app.get('/getPublicKey', function(req, res){ 
    var publicKeyJson = {"Key": ""}; 
    console.log(myDecrypter.exportKey('public')); 
    publicKeyJson.Key = myDecrypter.exportKey('public'); 
    res.json(JSON.stringify(publicKeyJson)); 
}); 

ग्राहक तो इस तरह कि कुंजी की बचत होती है ...

var myEncrypter = new JSEncrypt(); 
var myJson = ""; 
$.getJSON("getPublicKey", function(data) { 
    myJson = JSON.parse(data).Key; 
     setKey(); 
}); 
function setKey() { 
    myEncrypter.setPublicKey(myJson); 
} 

जब मैं एन्क्रिप्ट और ग्राहक मैं यह करने पर संदेश भेजने के लिए मिल गया ...

function messageEncrypt() { 
    message = document.getElementById("message").value; 
    var encrypted = myEncrypter.encrypt(message); 
    myMessage = {"username": "", "userId": 0.0, "message": ""}; 
    myMessage.username = me.username; 
    myMessage.userId = me.userId; 
    myMessage.message = encrypted; 
    console.log(encrypted); 
    $.post("sendMessage", myMessage); 
} 

जब सर्वर को संदेश प्राप्त होता है तो यह होता है, यह वह जगह है जहां मुझे त्रुटियां मिलती हैं।

app.post('/sendMessage', function(req, res){ 
    var message = req.body; 
    var user = message.username; 
    var id = message.userId; 
    console.log("What a mess, " + user + " said " + message.message + " what on earth does that mean"); 
    //This line below errors 
    var clearMessage = myDecrypter.decrypt(message.message, 'utf8'); 
    console.log(user + " said " + clearMessage); 
}); 

त्रुटि मैं है ...

Error: Error during decryption (probably incorrect key). Original error: Error: error:040A1079:rsa routines:RSA_padding_check_PKCS1_OAEP_mgf1:oaep decoding error 
    at Error (native) 
    at NodeRSA.module.exports.NodeRSA.$$decryptKey (/home/node_modules/node-rsa/src/NodeRSA.js:295:19) 
    at NodeRSA.module.exports.NodeRSA.decrypt (/home/node_modules/node-rsa/src/NodeRSA.js:243:21) 
    at /home/securechat/securechat.js:36:36 
    at Layer.handle [as handle_request] (/home/node_modules/express/lib/router/layer.js:95:5) 
    at next (/home/node_modules/express/lib/router/route.js:131:13) 
    at Route.dispatch (/home/node_modules/express/lib/router/route.js:112:3) 
    at Layer.handle [as handle_request] (/home/node_modules/express/lib/router/layer.js:95:5) 
    at /home/node_modules/express/lib/router/index.js:277:22 
    at Function.process_params (/home/node_modules/express/lib/router/index.js:330:12) 

यहाँ हालांकि जहां यह दिलचस्प हो जाता है, इसके बाद के संस्करण मैं का एक निजी कुंजी था कि त्रुटि संदेश प्राप्त करने के लिए है ...

-----BEGIN RSA PRIVATE KEY----- 
MIIBOgIBAAJBAIhdx31QICGN1LKRW4WngeL3RtzPh7cEHmhFJB8m4bQUSTcSi4eg 
sUvMeZkWyaF9gOxtZKzk5TI6q+8hg8TY6S8CAwEAAQJASds423cVH/c4NsqhXh8e 
KvYwjBFeeNIjQegIq1KctbHmKNM5MMb4jnDqdY/S5XHHS22EGvLNheLgV8tlRjwG 
UQIhANpNmbl215eOsGPJ0jqz1XPMBrO35V6I3P04kvr66R1JAiEAn+oL0jtAFETR 
4PRfenye5MAu9US3V5MoDN8xUoEvKrcCIQDQT2ZWNNIrHAyzXB2QyJPxqInoqp1j 
5QPDWl3ewtj5iQIgY3E1nKw/stsA8LTGUvMAFBv2l4r9wDXAaBC7KSUwYY0CIAj4 
0gA9etDbPm3H/XDwK4WXs9mXkKroyxewkWoOoAw/ 
-----END RSA PRIVATE KEY----- 

और ग्राहक को भेजा सार्वजनिक कुंजी था ...

-----BEGIN PUBLIC KEY----- 
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIhdx31QICGN1LKRW4WngeL3RtzPh7cE 
HmhFJB8m4bQUSTcSi4egsUvMeZkWyaF9gOxtZKzk5TI6q+8hg8TY6S8CAwEAAQ== 
-----END PUBLIC KEY----- 

एन्क्रिप्ट किए गए संदेशों (stackoverflow) था ...

XDViV0InCSnpyBxbNu5Herut0JYSsp87buvhzM4g2f9z3khIx2zA8Ou0Uq0TtmqtvBBVtZi5wZbcS6em/vB78g== 

दिलचस्प बात यह है कि जब मैं jsencrypt वेबसाइट पर demo इस्तेमाल किया और मेरी निजी कुंजी के साथ-साथ एन्क्रिप्टेड संदेश में प्रवेश किया है तो सही decrypted संदेश मिलता है।

तो मेरे सवाल ...

मुझे अपने नोड आरएसए डिक्रिप्शन के साथ कुछ गलत कर रहा हूँ है ???

यदि आपको अब जानकारी/कोड की आवश्यकता है तो कृपया इसे नीचे दी गई टिप्पणियों में रखें।

+0

संभवतः बी/सी आपका उदाहरण जटिल है। इसे आसान बनाएं और हमें एक असफल jsfiddle.net – Oleander

उत्तर

9

अपने प्रश्न का उत्तर देने के लिए @Curious_Programmer डिफ़ॉल्ट नोड-आरएसए एन्क्रिप्शन और डिक्रिप्शन के लिए pkcs1_oaep का उपयोग करता है जबकि jsencrypt pkcs1 का उपयोग करता है। शुक्र है नोड आप

var myDecrypter = new NodeRSA({b: 512}); 

तहत encryptionScheme, आप जोड़ना है क्या करने की जरूरत ...

myDecrypter.setOptions({encryptionScheme: 'pkcs1'}); 

बदल सकते हैं और सभी एक आकर्षण की तरह काम करेगा, मैं आशा व्यक्त की मैं तुम्हें मदद की सुविधा देता है;)

+0

प्रदान करें I मदद एम 8 के लिए धन्यवाद :) –

1

ऐसा लगता है कि सिफरटेक्स्ट एक बफर है, यानी बाइनरी डेटा। फिर इसे JSON का उपयोग करके ले जाया जाता है, जिसमें टेक्स्ट होता है। आपको टेक्स्ट आधारित इंटरफ़ेस पर परिवहन के लिए बाइनरी डेटा पर टेक्स्ट एन्कोडिंग का उपयोग करने की आवश्यकता है।


चेक encrypt विधि की निम्नलिखित परिभाषा:

key.encrypt(buffer, [encoding], [source_encoding]); 
याद दिलाते हैं कि डिफ़ॉल्ट [encoding] के लिए 'buffer' है साथ

तो आप उपयोग कर किया जाना चाहिए:

var encrypted = myEncrypter.encrypt(message, 'base64', 'utf-8'); 

जहां 'base64' सिफर एन्कोडिंग के लिए है और 'utf-8' प्लेन टेक्स्ट एन्कोडिंग के लिए है।


डिक्रिप्शन दिनचर्या स्वचालित रूप से सिफर का बेस 64 डिकोडिंग का उपयोग करना चाहिए:

var clearMessage = myDecrypter.decrypt(message.message, 'utf8'); 

ठीक होना चाहिए।

0

मेरे पास एक ही समस्या है।

encrypt.setOptions({encryptingScheme:'pkcs1'});//Can be 'pkcs1_oaep' or 'pkcs1'. Default 'pkcs1_oaep'. 

लेकिन, यह अभी भी असफल रहा है।

मैंने नोड-आरएसए से ursa में lib को बदल दिया है। इस तरह:

privateKey.decrypt(thirdEncrypted, 'base64', 'utf8',ursa.RSA_PKCS1_PADDING); 

समस्या उर्सा में समाधान हो गया।

संबंधित मुद्दे