node.js - नोडजे क्रिप्टो की समझने में गलत क्या है?



cryptography openssl (1)

एन्क्रिप्टेड डेटा एक 8 बाइट "जादू" से शुरू होता है जो दर्शाता है कि नमक है। तो अगला 8 बाइट्स नमक है अब बुरी खबर: नोड। जेएस EVP_BytesToKey विधि के लिए नमक का उपयोग नहीं करता है:

int key_len = EVP_BytesToKey(cipher, EVP_md5(), NULL,
  (unsigned char*) key_buf, key_buf_len, 1, key, iv);

यह NULL नमक है

यह एक जावा परीक्षण आवेदन (सही नमक का उपयोग करके) का उपयोग करके सत्यापित किया गया है - परिणाम स्ट्रिंग लौटा था

कृपया ओपनएसएसएल -nosalt स्विच का उपयोग करके नमक को छोड़ दें और फिर से प्रयास करें।

[उदाहरण]

ओपनएसएसएल सीएलआई:

openssl enc -aes-256-cbc -nosalt -a -k password
owlstead
Mh5yxIyZH+fSMTkSgkLa5w==

नोडजेएस क्रिप्टो:

var crypto=require('crypto')
var cipher=crypto.createDecipher('aes-256-cbc', "password")
var enc = cipher.update("Mh5yxIyZH+fSMTkSgkLa5w==", 'base64', 'utf8')
enc += cipher.final('utf8')

[लेट एडिट] नोट करें कि नमक और बड़े काम के कारक के साथ गुप्त कुंजी व्युत्पन्न का उपयोग सुरक्षा के लिए सर्वोपरि हो सकता है आप बेहतर ढंग से एक बहुत ही अनोखी, उच्च एंट्रोपी पासवर्ड का उपयोग करेंगे अन्यथा आपके एन्क्रिप्टेड डेटा जोखिम में हो सकता है।

[वास्तव में लेट एडिट ] ओपनएसएसएल 1.1.0 सी ने डायजेस्ट एल्गोरिदम को कुछ आंतरिक घटकों में इस्तेमाल किया। पूर्व में, MD5 का उपयोग किया गया था, और 1.1.0 SHA256 पर स्विच किया गया था। सावधान रहें कि परिवर्तन EVP_BytesToKey और आज्ञाओं दोनों में आपको प्रभावित नहीं कर रहा है जैसे कि openssl enc

मेरे पास निम्न एन्क्रिप्ट किए गए डेटा हैं:

U2FsdGVkX1+21O5RB08bavFTq7Yq/gChmXrO3f00tvJaT55A5pPvqw0zFVnHSW1o

इसे डिक्रिप्ट करने वाला पास है: password

(यह उदासीन एस से उदाहरण है)

Openssl का उपयोग करते हुए कमांड लाइन में:

echo "U2FsdGVkX1+21O5RB08bavFTq7Yq/gChmXrO3f00tvJaT55A5pPvqw0zFVnHSW1o" | openssl enc -d -aes-256-cbc -a -k password

आउटपुट है:

Made with Gibberish\n

मेरे नोडजेएस एप्लीकेशन के साथ:

  var decipher = crypto.createDecipher('aes-256-cbc', "password");
  var dec = decipher.update("U2FsdGVkX1+21O5RB08bavFTq7Yq/gChmXrO3f00tvJaT55A5pPvqw0zFVnHSW1o",
     'base64', 'utf8');
  dec += decipher.final('utf8');

मेरे पास निम्नलिखित त्रुटि है TypeError: DecipherFinal faildecipher.final लाइन।

क्या मैं कुछ भूल रहा हूँ ? धन्यवाद।





aes