python पायथन में अपेक्षित डिक्रिप्शन से मेल करने के लिए Node.js में एईएस एन्क्रिप्शन



encryption aes (1)

आपको एन्क्रिप्शन के लिए इसका उपयोग करने के बाद केवल बेस 64 को साझा गुप्त कुंजी को सांकेतिक शब्दों में करना चाहिए:

var shared_secret = Crypto.randomBytes(32);
var cipher = Crypto.createCipheriv('aes-256-ecb', shared_secret, "");
crypted_blob = cipher.update(blob, 'utf8', 'base64') + cipher.final('base64');
// send `shared_secret.toString('base64')`

दूसरी समस्याएं:

  • crypto.createCipher यह मानता है कि साझा रहस्य एक पासवर्ड है और एक कुंजी नहीं है, यही कारण है कि यह एक खराब कुंजी व्युत्पत्ति (ओपनएसएसएल-संगत) का उपयोग करेगा।
  • Node.js 'क्रिप्टो मॉड्यूल स्वतः PKCS # 7 पैडिंग (PKCS # 5 पैडिंग के समान) पर लागू होता है, लेकिन PyCrypto अपने आप में किसी भी पैडिंग को लागू नहीं करता है। इसलिए आपको या तो अजगर में एक ही अनपैडिंग का उपयोग करने की आवश्यकता है या आप सिफर .सेटआऊटपैडिंग के साथ Cipher.setAutoPadding(false); । जे में पैडिंग अक्षम कर सकते हैं Cipher.setAutoPadding(false); , लेकिन तब आपको सादा पाठ प्रदान करना होगा जो ब्लॉक आकार (एईएस के लिए 16 बाइट) का एक बहुत अधिक है।

सुरक्षा विचार:

  • कभी भी ईसीबी मोड का उपयोग न करें । यह नियतात्मक है और इसलिए अर्थात् रूप से सुरक्षित नहीं है। आपको कम से कम किसी भी यादृच्छिक मोड का उपयोग करना चाहिए जैसे कि सीबीसी या सीटीआर अपने सिफरेट्स को प्रमाणित करना बेहतर है ताकि एक पैडिंग ऑरेकल हमले की तरह हमले संभव न हो। इसे जीसीएम या ईएक्स जैसे प्रमाणीकृत मोड या एक एन्क्रिप्ट-तो-मैक योजना के साथ किया जा सकता है।

मेरे पास डिक्रिप्शन के लिए निम्नलिखित पायथन स्क्रिप्ट है:

from Crypto.Cipher import AES

shared_secret = raw_input('Enter crypted_shared_secret: ').strip()
cipher = AES.new(shared_secret.decode('base64'), AES.MODE_ECB)

blob = raw_input('Enter crypted_blob: ').strip()
plain = cipher.decrypt(blob.decode('base64'))

print(plain)

मैं उन मूल्यों को उत्पन्न करने की कोशिश कर रहा हूं जो नोड का उपयोग करके उस स्क्रिप्ट का उपयोग करके मूल blob का उत्पादन करेगा। मेरा प्रयास है:

const Crypto = require('crypto');

var shared_secret = Crypto.randomBytes(32);
var cipher = Crypto.createCipher('aes-256-ecb', shared_secret);
crypted_blob = cipher.update(blob, 'utf8', 'base64') + cipher.final('base64');

मैं केवल Node.js स्क्रिप्ट को संशोधित कर सकता हूं, लेकिन मुझे यकीन नहीं है कि यह गलत क्यों हो रहा है।





aes