मौजूदा जवाब जो SJCL, CryptoJS, और / या WebCrypto का लाभ उठाते हैं, जरूरी नहीं कि गलत हों, लेकिन वे उतने सुरक्षित नहीं हैं जितना कि आपको शुरू में संदेह हो सकता है। आम तौर पर आप लिबासोडियम का उपयोग करना चाहते हैं । पहले मैं समझाता हूँ क्यों, फिर कैसे।
SJCL, CryptoJS, WebCrypto, आदि क्यों नहीं?
संक्षिप्त उत्तर: आपके एन्क्रिप्शन को वास्तव में सुरक्षित रखने के लिए, ये लाइब्रेरी आपसे बहुत अधिक विकल्प बनाने की अपेक्षा करती है जैसे कि ब्लॉक सिफर मोड (CBC, CTR, GCM; का उपयोग करें और क्या सीमा के अन्दर, आप विकल्प की इस तरह के बोझ तले नहीं किया जाना चाहिए सब पर )।
जब तक आपकी नौकरी का शीर्षक क्रिप्टोग्राफी इंजीनियर नहीं है , तब तक आपके द्वारा इसे सुरक्षित रूप से लागू करने के खिलाफ बाधाओं का ढेर है।
CryptoJS से क्यों बचें?
CryptoJS मुट्ठी भर इमारत ब्लॉकों की पेशकश करता है और आपसे अपेक्षा करता है कि आप उन्हें सुरक्षित रूप से उपयोग करने का तरीका जानें। यह सीबीसी मोड ( संग्रहीत ) में भी चूक करता है ।
CBC मोड खराब क्यों है?
एईएस-सीबीसी कमजोरियों पर इस लेख को पढ़ें ।
WebCrypto से क्यों बचें?
WebCrypto एक पोट्लक मानक है, जिसे समिति द्वारा डिज़ाइन किया गया है, जो कि क्रिप्टोग्राफी इंजीनियरिंग के लिए ऑर्थोगोनल हैं। विशेष रूप से, WebCrypto फ्लैश को बदलने के लिए था, सुरक्षा प्रदान नहीं करता था ।
एसजेसीएल से क्यों बचें?
एसजेसीएल के सार्वजनिक एपीआई और प्रलेखन उपयोगकर्ताओं को मानव-याद पासवर्ड के साथ डेटा को एन्क्रिप्ट करने के लिए कहते हैं। यह शायद ही कभी होता है, यदि आप वास्तविक दुनिया में क्या करना चाहते हैं।
अतिरिक्त रूप से: इसका डिफ़ॉल्ट PBKDF2 राउंड काउंट लगभग 86 गुना छोटा है जितना आप चाहते हैं कि यह हो । एईएस -128-सीसीएम शायद ठीक है।
उपरोक्त तीन विकल्पों में से, एसजेसीएल आँसू में समाप्त होने की सबसे कम संभावना है। लेकिन बेहतर विकल्प उपलब्ध हैं।
लिबासोडियम बेहतर क्यों है?
आपको सिफर मोड, हैश फ़ंक्शंस और अन्य अनावश्यक विकल्पों के मेनू के बीच चयन करने की आवश्यकता नहीं है। आप अपने मापदंडों को खराब करने और अपने प्रोटोकॉल से सभी सुरक्षा को हटाने का जोखिम कभी नहीं लेंगे ।
इसके बजाय, लिबासोडियम आपको अधिकतम सुरक्षा और न्यूनतर एपीआई के लिए सरल विकल्प देता है।
crypto_box()/ crypto_box_open()प्रमाणित सार्वजनिक कुंजी एन्क्रिप्शन की पेशकश।
- प्रश्न में एल्गोरिथ्म X25519 (कर्व 255 पर ECDH) और XSalsa20-Poly1305 को जोड़ती है, लेकिन आपको इसे सुरक्षित रूप से उपयोग करने के बारे में (या यहां तक कि देखभाल) जानने की आवश्यकता नहीं है
crypto_secretbox()/ crypto_secretbox_open()साझा-कुंजी प्रमाणित एन्क्रिप्शन की पेशकश करें।
- प्रश्न में एल्गोरिथ्म XSalsa20-Poly1305 है, लेकिन आपको जानने / देखभाल करने की आवश्यकता नहीं है
इसके अतिरिक्त, लिबासोडियम में दर्जनों लोकप्रिय प्रोग्रामिंग भाषाओं में बाइंडिंग है , इसलिए यह बहुत संभावना है कि लिबासोडियम सिर्फ तभी काम करेगा जब किसी अन्य प्रोग्रामिंग स्टैक के साथ हस्तक्षेप करने की कोशिश कर रहा हो। इसके अलावा, लिबासोडियम सुरक्षा का त्याग किए बिना बहुत तेज हो जाता है।
जावास्क्रिप्ट में लिबसोडियम का उपयोग कैसे करें?
सबसे पहले, आपको एक बात तय करने की आवश्यकता है:
- क्या आप डेटा को एन्क्रिप्ट / डिक्रिप्ट करना चाहते हैं (और शायद अभी भी किसी तरह डेटाबेस क्वेरी में प्लेटेक्स्ट का उपयोग सुरक्षित रूप से करते हैं) और विवरण के बारे में चिंता न करें? या ...
- क्या आपको किसी विशिष्ट प्रोटोकॉल को लागू करने की आवश्यकता है?
यदि आपने पहला विकल्प चुना है , तो CipherSweet.js प्राप्त करें ।
प्रलेखन ऑनलाइन उपलब्ध है । EncryptedFieldअधिकांश उपयोग के मामलों के लिए पर्याप्त है, लेकिन यदि आपके पास एन्क्रिप्ट करने के लिए बहुत सारे अलग-अलग फ़ील्ड हैं, तो एपीआई EncryptedRowऔर EncryptedMultiRowsएपीआई आसान हो सकते हैं।
सिफरस्वीट के साथ, आपको यह भी जानने की जरूरत नहीं है कि सुरक्षित रूप से इसका उपयोग करने के लिए एक गैर / IV क्या है ।
इसके अतिरिक्त, यह सिफरटेक्स्ट आकार के माध्यम से सामग्री के बारे में तथ्यों को लीक किए बिना int/ floatएन्क्रिप्शन को संभालता है ।
अन्यथा, आप सोडियम-प्लस चाहते हैं , जो विभिन्न लिबासोडी रैपरों के लिए एक उपयोगकर्ता के अनुकूल दृश्य है। सोडियम-प्लस आपको प्रदर्शनकर्ता, अतुल्यकालिक, क्रॉस-प्लेटफ़ॉर्म कोड लिखने की अनुमति देता है जो ऑडिट करना आसान है और इसके बारे में तर्क देता है।
सोडियम-प्लस स्थापित करने के लिए, बस चलाएं ...
npm install sodium-plus
वर्तमान में ब्राउज़र समर्थन के लिए कोई सार्वजनिक CDN नहीं है। यह जल्द ही बदल जाएगा। हालाँकि, आप हड़प सकते हैंsodium-plus.min.js नवीनतम Github रिलीज़ से यदि आपको इसकी आवश्यकता है।
const { SodiumPlus } = require('sodium-plus');
let sodium;
(async function () {
if (!sodium) sodium = await SodiumPlus.auto();
let plaintext = 'Your message goes here';
let key = await sodium.crypto_secretbox_keygen();
let nonce = await sodium.randombytes_buf(24);
let ciphertext = await sodium.crypto_secretbox(
plaintext,
nonce,
key
);
console.log(ciphertext.toString('hex'));
let decrypted = await sodium.crypto_secretbox_open(
ciphertext,
nonce,
key
);
console.log(decrypted.toString());
})();
सोडियम-प्लस का प्रलेखन जीथब पर उपलब्ध है।
यदि आप चरण-दर-चरण ट्यूटोरियल चाहते हैं, तो यह dev.to लेख है में वह है जो आप खोज रहे हैं।