यहां हमारे पास कुछ सामान्य प्रीटी गुड प्राइवेसी (पीजीपी) आदिम कार्य हैं जो एपीआई कॉल के रूप में एक नोड एचटीटीपीएस: सर्वर पर चल रहे हैं।
ये फ़ंक्शन विशिष्ट नहीं हैं जैसा कि कहने के लिए इस्तेमाल किया जा सकता है, एक ईमेल मैसेजिंग प्लगइन लागू करें, बल्कि इसके बजाय विशेष रूप से उपयोगकर्ता पंजीकरण और लॉगऑन प्राधिकरण एप्लिकेशन के लिए हैं जो सामान्य कार्यों को इसकी बड़ी प्रक्रिया का समर्थन करने के लिए आमंत्रित करते हैं।
यहां दिखाई गई अवधारणाएं और कोड आसानी से अनुकूलनीय हैं और https://github.com/Bob-Wright/openPGP_functions_on_Node_API_Server पर साझा किए जाते हैं।
पीजीपी एक सार्वजनिक कुंजी क्रिप्टोग्राफी (पीकेसी) योजना का कार्यान्वयन है जो आमतौर पर आरएसए एन्क्रिप्शन पद्धति पर आधारित होती है।
पीजीपी आमतौर पर ईमेल संदेशों पर हस्ताक्षर करने और उन्हें एन्क्रिप्ट करने के लिए नियोजित किया जाता है जिसे प्राप्तकर्ता द्वारा सत्यापित और डिक्रिप्ट किया जाता है। एक और बड़ा उपयोग उनकी सामग्री की सुरक्षा के लिए फ़ाइलों और ड्राइव को एन्क्रिप्ट करना है।
ध्यान दें कि पीकेसी/पीजीपी की विशेषताएं ऐसे एक्सचेंज या लेनदेन में प्रतिभागियों की पहचान को एक दूसरे के लिए पहचान योग्य बनाती हैं। वास्तव में, हमारा उपयोग मामला योजना के इस पहलू पर आधारित है।
यहां पीकेसी योजनाओं के बारे में एक लेख है जो इसमें शामिल अवधारणाओं और विधियों की कुछ अच्छी व्याख्या देता है: https://hackernoon.com/public-key-cryptography-simply-explained-e932e3093046 ।
एन्क्रिप्शन के लिए एक तकनीक या विधि के रूप में पीजीपी कुछ समय के लिए उपलब्ध है और इसे विभिन्न भाषाओं और प्लेटफार्मों की एक अच्छी संख्या में कोडित या प्रोग्राम किया गया है।
हमारे द्वारा उपयोग किया जाने वाला हालिया ओपनपीजीपीजे जावास्क्रिप्ट कार्यान्वयन नोडज में एसिंक्रोनस एपीआई के रूप में लिखा गया है और इसे इस भंडार में पाया जा सकता है: https://github.com/openpgpjs/openpgpjs ।
हम एक एक्सप्रेस Nodejs एपीआई ढांचे के माध्यम से openPGPjs के कार्यों के लिए एक इंटरफ़ेस प्रदान करते हैं जो कॉलर से POST फॉर्म सबमिशन का उपयोग करता है।
हमारे Nodejs server.js API प्रोग्राम में हेडिंग कोड निम्नलिखित है। कोड का यह खंड उन मॉड्यूल को दिखाता है जिन्हें हमें शामिल करने की आवश्यकता है।
इस शीर्षक कोड का अनुसरण करते हुए, हमने अपने द्वारा प्रदान किए जाने वाले विभिन्न कार्यों के लिए यहां कई एपीआई प्रविष्टि बिंदु डाले हैं।
इन विभिन्न एपीआई कार्यों के सूचीबद्ध होने के बाद, हमारे पास कोड का यह अंतिम संक्षिप्त खंड है जो एपीआई कार्यों के लिए HTTPS: सर्वर को सेट और चलाता है।
हमारा एपीआई अपनी गतिविधियों के दौरान कई वस्तुओं से संबंधित है, और उनमें से कुछ वस्तुओं को डेटाबेस में तालिकाओं में संग्रहीत किया जाता है और एक अन्य डेटा तालिका की सामग्री से उत्पन्न होता है।
बाद में डेटा तालिका के उपयोग के बारे में अधिक जानकारी, लेकिन इस बीच, कोड का यह निम्नलिखित ब्लॉक एक नोड मॉड्यूल usersdb_conn.js के लिए है जो हमें हमारे उपयोगकर्ताओं के mySQL डेटाबेस से जोड़ता है जिसका हम सामान्य रूप से एपीआई कार्यों के भीतर उपयोग करते हैं।
अब जब हमने अपने सामान्य एपीआई शेल का वर्णन कर दिया है, तो हम उन कार्यों को देख सकते हैं जो यह हमारे उपयोगकर्ताओं को प्रस्तुत करता है।
वस्तुतः प्रत्येक पीजीपी फ़ंक्शन अपने निर्धारण और संचालन में तीन महत्वपूर्ण वस्तुओं में से एक या अधिक को नियोजित करता है।
इनमें से पहला ऑब्जेक्ट उपयोगकर्ता ऑब्जेक्ट है, जो हमारे मामले में, उपयोगकर्ता के बारे में डेटा से उत्पन्न होता है जिसे हम POST संदेश के माध्यम से प्रदान किए गए उपयोगकर्ता के ईमेल पते के साथ डेटाबेस से निकालते हैं।
इस उपयोगकर्ता डेटाबेस की सामग्री को पहले हमारी पंजीकरण प्रक्रिया के दूसरे भाग से भरा गया था।
यहां, नीचे दी गई सूची में, हम कुंजी जनरेटर फ़ंक्शन के साथ-साथ एक कॉन्फ़िगरेशन फ़ाइल से कुंजी प्रकार और कुंजी बिट लंबाई प्राप्त करने के लिए उपयोग किए जाने वाले POST अनुरोध और विशिष्ट उपयोगकर्ता डेटा मानों को निकालने के लिए उपयोग किए जाने वाले फ़ंक्शन को देख सकते हैं। डेटाबेस तालिका से।
नीचे दिए गए इस अगले सूची अनुभाग में, हम पहले नाम, अंतिम नाम, पासफ़्रेज़ और ईमेल डेटा मानों का उपयोग करके ओपनपीजीपी कुंजी जनरेशन फ़ंक्शन का आह्वान देखते हैं जो हमने ऊपर प्राप्त किया था। एक बार जब इस डेमो संस्करण में कुंजियाँ उत्पन्न हो जाती हैं, तो हम उनमें से प्रत्येक को एक उपयुक्त फ़ाइल में भी लिख देते हैं।
नीचे दिए गए दो कार्य सार्वजनिक और निजी कुंजी डेटा तालिकाओं में सार्वजनिक और निजी कुंजी रिकॉर्ड के अस्तित्व की जांच करते हैं। हम इस जानकारी का उपयोग यह तय करने के लिए करते हैं कि क्या हम एक नई कुंजी सम्मिलित कर रहे हैं या पहले से मौजूद कुंजी को बदल/अपडेट कर रहे हैं जैसा कि नीचे दी गई सूची में दिखाया गया है।
नीचे दिया गया फ़ंक्शन उस उपयोगकर्ता के ब्राउज़र के लिए एक सलामी बैनर सफलता संदेश पृष्ठ प्रदर्शित करता है जिसने डेमो जनरेट कीज़ API POST भेजा था।
यह keygenWebpage सफलता बैनर डिस्प्ले पेज कोड जिसकी हमने अभी ऊपर जांच की है, API के प्रमुख जनरेटर POST सेक्शन में उपयोग किया जाने वाला अंतिम फ़ंक्शन है।
उपयोगकर्ता कुंजी जोड़ी बनाने के इच्छित कार्य को पूरा करने के लिए इन व्यक्तिगत कार्यों को प्राप्त करने के लिए, हमें इन कार्यों को प्रत्येक फ़ंक्शन के साथ कार्य के लिए उचित क्रम में निष्पादित करने के लिए एक विधि की आवश्यकता है, बदले में, कार्य सूची में अपना योगदान प्रदान करना .
तो कुंजी जनरेटर एपीआई कॉल के लिए मुख्य कोड हम इस "performAsyncFunctions" मॉडल फ़ंक्शन के हिस्से के रूप में रन पर चर्चा कर रहे हैं जो एक एसिंक्रोनस फ़ंक्शन कंट्रोलर है जो प्रत्येक फ़ंक्शन को क्रमिक रूप से चलाता है, प्रत्येक फ़ंक्शन को अगले पर जाने से पहले पूरा करने की प्रतीक्षा करता है।
एक बार यह कुंजी जनरेटर एपीआई कॉल चलाए जाने के बाद हमारे पास आमतौर पर एन्क्रिप्ट या डिक्रिप्ट करने और हमारे उपयोग के लिए उपलब्ध टेक्स्ट संदेशों को साइन या सत्यापित करने के लिए उपयोग की जाने वाली सभी तीन वस्तुएं होंगी।
हमारे पास एक साधारण HTML मेनू पृष्ठ है जिसका नाम sendPost.html है, जो हमारे एपीआई से उपलब्ध कॉलों को प्रदर्शित करने या चलाने के लिए सेटअप के नीचे यहां दिखाया गया है।
यह आपका मूल HTML फॉर्म है जो हमारे एपीआई सर्वर को एक POST अनुरोध भेजता है और एक कुंजी जोड़ी बनाने के लिए तीन प्रविष्टियाँ इस कोड के साथ लागू की जाती हैं जो आगे दिखाया गया है।
अंत में, हमारे डेमो के लिए, हम एक बैनर पेज डिस्प्ले प्रदर्शित करते हैं जो प्रमुख पीढ़ी की प्रक्रिया को पूरा करता है। यह पूर्णता पीजीपी योजना के उपयोग के लिए तीन मुख्य वस्तुओं में परिणत होती है। पहला नाम , अंतिम नाम, पासफ़्रेज़ और ईमेल पते की विशेषताओं के साथ उपयोगकर्ता ऑब्जेक्ट का एक है।
हमारे कुंजी जनरेटर ने हमारे उपयोग के लिए दो अतिरिक्त नई वस्तुएं बनाई हैं, एक सार्वजनिक कुंजी वस्तु और एक निजी कुंजी वस्तु।
कंसोल लॉग का उपयोग विभिन्न कार्यों के लिए हमारे परिणामों और प्रगति को प्रदर्शित करने के लिए किया जाता है, और यह कुंजी जनरेटर डेमो चलाने से एक उदाहरण कंसोल लॉग है।
रुचि के चार कार्य हैं जिनका उपयोग हम अपने एपीआई कार्यान्वयन में करते हैं। ये ऑपरेशन एक संदेश को एन्क्रिप्ट करने, एक संदेश पर हस्ताक्षर करने, एक संदेश को डिक्रिप्ट करने और एक संदेश को सत्यापित करने के लिए हैं।
एन्क्रिप्ट-और-हस्ताक्षर या संदेश को डिक्रिप्ट-और-सत्यापित दोनों करना संभव है, इसलिए यह हमें कुंजी जनरेटर से अलग छह सामान्य कार्यों की एक तालिका देता है।
संदेश एन्क्रिप्शन प्रेषक की सार्वजनिक कुंजी का उपयोग करता है जबकि संदेश डिक्रिप्शन प्राप्तकर्ता की निजी कुंजी और पासफ़्रेज़ का उपयोग करता है, इसलिए ये पूरक संचालन पूरक कुंजी का उपयोग करते हैं।
संदेश हस्ताक्षर हस्ताक्षरकर्ता की निजी कुंजी और पासफ़्रेज़ का उपयोग करता है जबकि सत्यापन समान रूप से पूरक तरीके से सार्वजनिक कुंजी का उपयोग करता है।
किसी संदेश को एन्क्रिप्ट करना या किसी संदेश को डिक्रिप्ट करना सबसे आम पीजीपी कार्यों में से दो हैं। आइए देखें कि वे हमारे एपीआई में कैसे लागू होते हैं।
नीचे दिखाया गया यह कोड हमारे एन्क्रिप्ट एपीआई कॉल की शुरुआत है।
जैसा कि देखा जा सकता है, पहली चीज जो हम करते हैं वह है POST संदेश से प्रेषक या एन्क्रिप्टर का ईमेल पता प्राप्त करना, इसके बाद प्लेनटेक्स्ट संदेश प्राप्त करना जिसे हम एन्क्रिप्ट करना चाहते हैं, साथ ही एन्क्रिप्टर की सार्वजनिक कुंजी, जिसे हमारे डेमो में एक से निकाला जाता है। हमारे एपीआई कॉल में प्रदान किए गए ईमेल के आधार पर डेटाबेस तालिका।
एक बार जब हमारे पास सादा पाठ संदेश होता है जिसे हम प्रेषक की सार्वजनिक कुंजी के साथ एन्क्रिप्ट करना चाहते हैं, तो हम एक ओपनपीजीपी फ़ंक्शन का उपयोग करके संदेश को एन्क्रिप्ट करना जारी रख सकते हैं जैसा कि यहां दिखाया गया है।
हमारे डेमो के लिए, हम डिस्क पर एन्क्रिप्टेड फ़ाइल लिखकर एपीआई कॉल को समाप्त करते हैं।
ऊपर सूचीबद्ध और हमारे एन्क्रिप्ट एपीआई कॉल में उपयोग किए गए इन सभी कार्यों को ऊपर सूचीबद्ध प्रतीक्षित कार्यों के संलग्न अनुक्रम के साथ "performEncryptAsyncFunctions" एसिंक्रोनस फ़ंक्शन को बंद करने के निर्देश के अनुसार चलाया जाता है।
डेमो इस कॉल के लिए हमारे एपीआई उपयोगकर्ता को एक पूर्ण संदेश प्रस्तुत नहीं करता है, लेकिन यह हमारे सर्वर टर्मिनल पर एक लॉग फ़ाइल प्रस्तुत करता है जैसा कि नीचे दिखाया गया है।
एक बार जब हमारे पास एक एन्क्रिप्टेड टेक्स्ट मैसेज होता है, तो हम इसके प्लेन टेक्स्ट या अनएन्क्रिप्टेड कंटेंट को पढ़ना चाह सकते हैं। यह निश्चित रूप से डिक्रिप्शन की प्रक्रिया को पूरा करता है जो निम्नलिखित कोड द्वारा पूरा किया जाता है।
हम अपने उपयोगकर्ता ईमेल पते के लिए POST संदेश को एक फ़ाइल से हमारे एन्क्रिप्टेड संदेश को पढ़ने के लिए एक फ़ंक्शन के बाद पार्स करना शुरू करते हैं।
हमारे उपयोग के मामले में डिक्रिप्शन के लिए एक निजी कुंजी और एक पासफ़्रेज़ दोनों की आवश्यकता होती है, और हम अपने उपयोगकर्ता डेटाबेस से पासफ़्रेज़ निकालते हैं जैसा कि यहाँ दिखाया गया है।
हमारी पीजीपी योजना " आर्मरिंग " नामक एक प्रक्रिया द्वारा सुरक्षा का एक अतिरिक्त स्तर प्रदान करती है, जिसमें इस पासफ़्रेज़ के साथ इसे एन्क्रिप्ट करना शामिल है।
इन दो पिछले कार्यों के अलावा, हमारे पास इसके डेटाबेस से निजी कुंजी प्राप्त करने के लिए एक अतिरिक्त कार्य है।
इन वस्तुओं के साथ, हम संदेश को डिक्रिप्ट कर सकते हैं और नीचे दी गई सूची में पहले दो कार्यों का उपयोग करके सादे टेक्स्ट को फ़ाइल में सहेज सकते हैं।
एक बार फिर, जैसा कि ऊपर दिखाया गया है, हम प्रतीक्षा सूची में प्रत्येक फ़ंक्शन को क्रमिक रूप से करने के लिए अपने "performAsyncFunctions" निर्माण का उपयोग करते हैं।
जैसा कि एन्क्रिप्ट एपीआई कॉल के साथ किया गया था, इस डिक्रिप्ट एपीआई कॉल द्वारा प्रदान किए गए इंटरैक्शन में कंसोल टर्मिनल पर प्रदर्शित टेक्स्ट होता है जैसा कि नीचे इस उदाहरण लॉग में दिखाया गया है।
कुंजी पीढ़ी , संदेश एन्क्रिप्शन और संदेश डिक्रिप्शन के तीन प्राथमिक कार्यों के अलावा, कोड चार अन्य एपीआई फ़ंक्शन भी प्रदान करता है जो एन्क्रिप्ट-एंड-साइन और डिक्रिप्ट-एंड-वेरीफाई एपीआई कॉल के साथ साइन और वेरिफाई करते हैं।
इन एपीआई के लिए कोड और टर्मिनल लॉग परिणाम https://github.com/Bob-Wright/openPGP_functions_on_Node_API_Server पर GitHub रिपॉजिटरी में शामिल हैं।
इस नोड प्रोग्राम को Linux (Ubuntu20) पर एक सेवा के रूप में चलाने के लिए कोड भी GitHub रिपॉजिटरी में शामिल है।
यह कोड किसी भी उत्पादन-तैयार उपयोगिता की तुलना में डेमो और NodeJS API उदाहरण के रूप में अधिक लिखा गया है। उम्मीद है, यह आपके लिए उस उद्देश्य को अच्छी तरह से पूरा करेगा, मैंने इसे अपने स्वयं के डेमो उदाहरण के रूप में लिखा है।
यह आसानी से आपके अपने सिरों के अनुकूल होना चाहिए। टिप्पणियों या सुझावों का स्वागत है।
यहाँ भी प्रकाशित