जावास्क्रिप्ट एईएस एन्क्रिप्शन [बंद]


109

जावास्क्रिप्ट में एईएस 256-बिट एन्क्रिप्शन के लिए एक पुस्तकालय उपलब्ध है?


यहाँ आपको CESo -js <script src = " cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/… > <स्क्रिप्ट> var एन्क्रिप्ट किया गया = CryptoJS.AES.encrypt का उपयोग करके AES एन्क्रिप्शन की आवश्यकता है। ("संदेश", "पासफ़्रेज़"); var डिक्रिप्टेड = CryptoJS.AES.decrypt (एन्क्रिप्टेडAES.toString (), "Passphrase"); कंसोल.log ("एन्क्रिप्ट किया गया": एन्क्रिप्टेडAES.toString ()); कंसोल.लॉग () "decrypted:", decrypted.toString (CryptoJS.enc.Utf8)); </ script>
हरि दास

जवाबों:


66

JSAES जावास्क्रिप्ट में एईएस का एक शक्तिशाली कार्यान्वयन है। http://point-at-infinity.org/jsaes/


32
JSAES को GNU GPL के तहत लाइसेंस प्राप्त है - इसलिए यह कुछ परियोजनाओं के लिए उपयोग करने योग्य नहीं है।
रॉबर्ट

11
यह अब काफी उपयोगी है और अमीर कोड की सुविधा देता है। http://www.p/crypto-js
डेविड कीरन्स

2
@ हप्पडीवेल्टर खैर, नहीं। इसके लिए लाइसेंस को दोष न दें। लेखक ने गलत लाइसेंस चुना है, क्योंकि जीपीएल पुस्तकालयों के लिए उपयुक्त नहीं है।
इंट

4
यह "उपयोग करने के लिए नि: शुल्क" है, लेकिन आप इसका उपयोग नहीं कर सकते हैं यदि आप अपने परिणामी उत्पाद को जीपीएल के अलावा किसी अन्य चीज के तहत जारी करना चाहते हैं।
कर्टिस

3
JSAES एक अच्छा प्रारंभिक बिंदु है लेकिन इसका उपयोग केवल 16 बाइट डेटा को एन्क्रिप्ट करने के लिए किया जा सकता है। यदि आप डेटा के बड़े ब्लॉक को एन्क्रिप्ट करना चाहते हैं, तो आपको इसे स्वयं को विस्तारित करना होगा ताकि वे इंट्रिब्यूशन वेक्टर, एन्क्रिप्ट मोड (CBC या अन्य ...), पेडिंग को लागू कर सकें।
पाओलो

35

यहां एक प्रदर्शन पृष्ठ है जो slowAES का उपयोग करता है।

slowAES का उपयोग करना आसान था। तार्किक रूप से डिजाइन किया गया। उचित OO पैकेजिंग। IV और एन्क्रिप्शन मोड की तरह knobs और लीवर का समर्थन करता है। .NET / C # के साथ अच्छी संगतता। नाम है जीभ-इन-गाल; इसे " धीमी AES" कहा जाता है क्योंकि यह C ++ में लागू नहीं है। लेकिन मेरे परीक्षणों में यह अव्यवहारिक रूप से धीमा नहीं था।

इसमें ईसीबी मोड का अभाव है। इसके अलावा, CTR मोड का अभाव है, हालाँकि आप ECB मोड में दिए गए एक बहुत आसानी से बना सकते हैं, मुझे लगता है।

यह पूरी तरह से एन्क्रिप्शन पर केंद्रित है। एक अच्छा पूरक वर्ग जो जावास्क्रिप्ट में RFC2898 -compliant पासवर्ड-आधारित कुंजी व्युत्पत्ति करता है, आनंदम से उपलब्ध है । पुस्तकालयों की यह जोड़ी अनुरूप .NET वर्ग के साथ अच्छी तरह से काम करती है। अच्छा इंटरॉप। हालाँकि, SlowAES के विपरीत, जावास्क्रिप्ट पीबीकेडीएफ 2 कुंजी पैदा करते समय Rfc2898DeriveBytes वर्ग की तुलना में काफी धीमा है ।

यह आश्चर्य की बात नहीं है कि तकनीकी रूप से अच्छा इंटरॉप है, लेकिन मेरे लिए मुख्य बिंदु था स्लोवाइस द्वारा अपनाया गया मॉडल परिचित और उपयोग में आसान है। मुझे AES के लिए कुछ अन्य जावास्क्रिप्ट लाइब्रेरीज़ मिलीं जिन्हें समझना और उपयोग करना कठिन है। उदाहरण के लिए, उनमें से कुछ में मुझे IV, या मोड (CBC, ECB, आदि) सेट करने की जगह नहीं मिली। चीजें ऐसी नहीं थीं, जहां मुझे उनके होने की उम्मीद थी। SlowAES ऐसा नहीं था। प्रॉपर्टीज वहीं थीं जहां मुझे उनसे उम्मीद थी। जावा और .NET क्रिप्टो प्रोग्रामिंग मॉडल से परिचित होना मेरे लिए आसान था।

आनंदम का PBKDF2 उस स्तर पर काफी नहीं था। इसने DeriveBytes फ़ंक्शन को केवल एक कॉल का समर्थन किया, इसलिए यदि आपको पासवर्ड से कुंजी और IV दोनों प्राप्त करने की आवश्यकता है, तो यह लाइब्रेरी अपरिवर्तित नहीं होगी। कुछ मामूली संशोधन, और यह उस उद्देश्य के लिए ठीक काम कर रहा है।

संपादित करें : मैं एक साथ रखा एक उदाहरण पैकेजिंग के SlowAES और आनन्दम के का एक संशोधित संस्करण PBKDF2 विंडोज़ स्क्रिप्ट घटक में। पासवर्ड-व्युत्पन्न कुंजी के साथ इस एईएस का उपयोग करना .NET RijndaelManaged वर्ग के साथ अच्छा अंतर दिखाता है।

EDIT2 : डेमो पेज एक वेब पेज से इस एईएस एन्क्रिप्शन का उपयोग करने का तरीका दिखाता है। .NET में समर्थित समान इनपुट्स (iv, की, मोड, आदि) का उपयोग करने से आपको .NET Rijndael क्लास के साथ अच्छा इंटरोप मिलता है। आप उस पृष्ठ के लिए जावास्क्रिप्ट प्राप्त करने के लिए एक "दृश्य स्रोत" कर सकते हैं।

EDIT3
एक देर से जोड़: जावास्क्रिप्ट क्रिप्टोग्राफी हानिकारक माना जाता है। पढ़ने लायक।



1
मुझे एक वैध उपयोग-केस दिखाई देता है - HTML 5 ऐप जिसमें सभी फाइलें लोकल स्टोर की जाती हैं। यदि स्थानीय फ़ाइलों को अपहृत किया जा सकता है तो किसी भी स्थिति में आपका काम;
नक्स

8
edit3 लिंक के बारे में, यह एक लेख की बकवास का एक टुकड़ा है ... इसके आधे कथन पूरी तरह से झूठे हैं!
एमएमएम

2
उपयोगकर्ता को माउस ले जाने और एक सच्चे यादृच्छिक जनरेटर के रूप में कुंजी दर्ज करने से यादृच्छिक कुंजी समस्या का समाधान किया जा सकता है।
एमएमएम

2
प्रदर्शन पृष्ठ का लिंक टूटा हुआ प्रतीत होता है।
शॉन

26

एईएस एन्क्रिप्शन के लिए मेरी खोजों में मैंने कुछ स्टैंडफोर्ड छात्रों से यह पाया। वहां तेजी से होने का दावा। CCM, OCB, GCM और ब्लॉक एन्क्रिप्शन का समर्थन करता है। http://crypto.stanford.edu/sjcl/


Thats क्या मैं बात कर रहा हूँ!
एमएमएम

5
दस्तावेज़ीकरण की कमी है, और इसका उपयोग करना मुश्किल है। आप मुख्य लंबाई कैसे बदलते हैं? मैंने डॉक्स का शिकार किया और उचित समय में इसका पता नहीं लगा सका। जब आप कुछ एन्क्रिप्ट करते हैं, तो आपको कुंजी-मूल्य वाले जोड़े की एक सरणी मिलती है, लेकिन डॉक्स इनकी व्याख्या नहीं करते हैं। मैं चल प्रकार की लाइब्रेरी का उपयोग कर समाप्त हो गया।
CpnCrunch

और यह async नहीं है इसलिए यदि आप एईएस-सीबीसी के साथ उदाहरण के लिए कुछ लंबे स्ट्रिंग एन्क्रिप्ट या डिक्रिप्ट कर रहे हैं, तो यह UI को ब्लॉक करता है
rsz

12

गोगलिंग "जावास्क्रिप्ट एईएस" ने कई उदाहरण पाए हैं। पहला पॉप अप जो एल्गोरिदम को समझाने और साथ ही समाधान प्रदान करने के लिए डिज़ाइन किया गया है:

जंगम प्रकार लिपियों: एईएस


1
मैं यह पता नहीं लगा सका कि उस पुस्तकालय में IV कैसे सेट किया जाए। इसके अलावा यह बहुत OO नहीं है।
चीज़ो

काउंटर मोड में IV के बराबर गैर है। यह कार्यान्वयन अधिक OO होने के लिए सुधार किया गया है। इसमें केवल काउंटर (CTR) मोड शामिल है।
क्रिस वी।

यह बहुत अच्छी तरह से काम करता है, इसके अलावा इसमें कोई ईसीबी मोड नहीं है।
21

10

यह पोस्ट अब पुरानी हो गई है, लेकिन क्रिप्टो-जेएस , अब पूरी तरह से जावास्क्रिप्ट एन्क्रिप्शन लाइब्रेरी हो सकती है।

CryptoJS जावास्क्रिप्ट में कार्यान्वित क्रिप्टोग्राफ़िक एल्गोरिदम का एक संग्रह है। इसमें निम्नलिखित वैज्ञानिक शामिल हैं: AES-128, AES-192, AES-256, DES, ट्रिपल डेस, खरगोश, RC4, RC4Drop और हैशर्स: MD5, RIPEMD-160, SHA-1, SHA-256, SHA-512, SHA -3 224, 256, 384, या 512 बिट्स के साथ।

आप उनके क्विक-स्टार्ट गाइड को देखना चाहते हैं जो निम्न नोड.जेएस पोर्ट के लिए भी संदर्भ है।

नोड-क्रिप्टोज-एईएस क्रिप्टो-जेएस का नोड.जेएस पोर्ट है


1
दुर्भाग्य से प्रलेखन की कमी है। यह केवल एक 'त्वरित शुरुआत' गाइड लगता है। पूर्ण प्रलेखन कहां है? यह कहता है कि यह कई महत्वपूर्ण लंबाई का समर्थन करता है, लेकिन यह कैसे करना है पर कोई प्रलेखन नहीं।
CpnCrunch

@CpnCrunch: पूर्ण एपीआई डॉक ऑनलाइन नहीं है, लेकिन पूर्ण javadoc एपीआई टिप्पणियों के रूप में कोड। और आप इसे जनरेट कर सकते हैं। Cipher-core.js स्रोत पर टिप्पणी पढ़ें Youl को सिफर का मुख्य आकार और सिफर का IV आकार मिलेगा।
'11:00

अजीब, जब मैं एन्क्रिप्ट और वापस डिक्रिप्ट, ग्रंथों अलग हैं
OMGPOP

वहाँ उपयोग openssl की वजह से कुछ मतभेद हैं
Vlad

9

हाल ही में मुझे जावास्क्रिप्ट और अजगर के बीच कुछ एन्क्रिप्शन / डिक्रिप्शन इंटरऑपरेबिलिटी करने की आवश्यकता थी।

विशेष रूप से ...

1) जावास्क्रिप्ट में एन्क्रिप्ट करने के लिए एईएस का उपयोग करना और अजगर (Google ऐप इंजन) में डिक्रिप्ट करना 2) जावास्क्रिप्ट में एन्क्रिप्ट करने के लिए आरएसए का उपयोग करना और अजगर (Google ऐप इंजन) में डिक्रिप्ट करना 3) pycrypto का उपयोग करना

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

आखिरकार मैं एक साथ कुछ करने में कामयाब रहा जो बहुत परीक्षण और त्रुटि के बाद मेरी जरूरतों के अनुकूल था।

किसी भी तरह मैंने js / webapp के उदाहरण के लिए दस्तक दी, जो एक Google ऐप इंजन होस्टेड अजगर सर्वर से बात कर रहा है जो एईएस और सार्वजनिक कुंजी और निजी कुंजी आरएसए सामान का उपयोग करता है।

हालांकि मैं इसे यहाँ लिंक के द्वारा शामिल करूँगा क्योंकि यह उसी चीज़ के लिए कुछ काम का होगा जिसे उसी चीज़ को पूरा करने की आवश्यकता है।

http://www.ipowow.com/files/aesrsademo.tar.gz

और rsa-aes-Demo DOT appspot DOT com पर डेमो देखें

संपादित करें: ब्राउज़र कंसोल आउटपुट को देखें और कुछ संकेत और उपयोगी संदेश प्राप्त करने के लिए स्रोत भी देखें जो डेमो में चल रहा है

संपादित करें: स्रोत को अब इंगित करने के लिए बहुत पुराना और अशुद्ध लिंक अपडेट किया गया

https://sestertii.com/files/aesrsademo.tar.gz


1
इस के लिए बहुत बहुत धन्यवाद! मैं अपने जीवन के लिए अपने पिरामिड एईएस से बात करने के लिए मेरे जावास्क्रिप्ट एईएस प्राप्त नहीं कर सका।
स्पाइक

1
मैं पूरी रात (pycrypto और अन्य लोगों के साथ) कोशिश कर रहा हूं कि आपके कोड ने मुझे 10 मिनट में पूरा करने में मदद की। आपको बहुत - बहुत धन्यवाद!
रेमी वनरहवेघे

1
जिस भी कारण से मुझे आरएसए आसानी से काम कर रहा था लेकिन एईएस एक शाही दर्द है। इसके लिए शुक्रिया!!!
स्पीडप्लेन

1
लिंक ... नहीं मिला है!
मशिनहेडिक जूल

7

मेरे अपने अनुभव को देखते हुए, asmcrypto.js जावास्क्रिप्ट में सबसे तेज़ एईएस कार्यान्वयन प्रदान करता है (विशेष रूप से फ़ायरफ़ॉक्स में क्योंकि यह पूरी तरह से asm.js का लाभ उठा सकता है)।

रीडमी से:

Chrome/31.0
SHA256: 51 MiB/s (9 times faster than SJCL and CryptoJS)
AES-CBC: 47 MiB/s (13 times faster than CryptoJS and 20 times faster than SJCL)

Firefox/26.0
SHA256: 144 MiB/s (5 times faster than CryptoJS and 20 times faster than SJCL)
AES-CBC: 81 MiB/s (3 times faster than CryptoJS and 8 times faster than SJCL)

संपादित करें: वेब क्रिप्टोग्राफी एपीआई अब है सबसे ब्राउज़र में लागू और प्राथमिक समाधान के रूप में इस्तेमाल किया जाना चाहिए यदि आप प्रदर्शन के बारे में परवाह है। विदित हो कि IE11 ने मानक का एक पूर्व मसौदा संस्करण लागू किया था जिसमें वादों का उपयोग नहीं किया गया था।

कुछ उदाहरण यहां देखे जा सकते हैं:


मुझे CryptoJS के साथ लगभग 8 MiB / s मिल रहे हैं। आश्चर्य है कि यह कैसा प्रदर्शन करेगा।
Lodewijk


3

Asmcrypto.js आज़माएं - यह वास्तव में तेज़ है।

पुनश्च: मैं एक लेखक हूं और यदि कोई हो तो मैं आपके सवालों का जवाब दे सकता हूं। इसके अलावा मैं कुछ प्रतिक्रिया पाने के लिए खुश हूँ :)


asmcrypto.js अच्छा है, लेकिन IE10 पर इसकी अच्छी तरह से काम नहीं करता है। यह कभी-कभी 1 मिनट से अधिक या कम से कम 45 सेकंड के लिए ब्राउज़र लटका देता है। इसके अलावा, मुझे समझ नहीं आया, आपको वैश्विक गणित फ़ंक्शन को बदलने की आवश्यकता क्यों है? बहुत सारे पुस्तकालय हैं जो इस का उपयोग करते हैं।
डेचो

2
क्या आप इस बात पर टिप्पणी कर सकते हैं कि आप सुनिश्चित हैं कि यह ठीक से काम कर रहा है? IOW: आप कैसे जानते हैं कि आपने एईएस को ठीक से लागू किया है?
Lodewijk

IE10 का प्रदर्शन खराब है क्योंकि यह asm.js को बिल्कुल भी ऑप्टिमाइज़ नहीं करता है। इसके अलावा यह थोड़ा अलग JIT पैटर्न है। IE में कोड को अच्छी तरह से काम करना भी इसे Chrome और FF में चूसना बनाता है। मान लीजिए मेरे पास सही विकल्प था। मैथ के बारे में। आयामी एक लंबी चर्चा थी । कच्चे Math.random आउटपुट रिसाव को रोकने के लिए इस आवश्यकता को बोलने के लिए (सिद्धांत में विच पीआरएनजी सुरक्षा को नीचा कर सकता है)।
vibornoff



1

यदि आप SSL का उपयोग करने से बचने के लिए जावास्क्रिप्ट का उपयोग करने का प्रयास कर रहे हैं, तो फिर से सोचें। कई आधे-अधूरे उपाय हैं, लेकिन केवल SSL सुरक्षित संचार प्रदान करता है। जावास्क्रिप्ट एन्क्रिप्शन लाइब्रेरी हमलों के एक निश्चित सेट के खिलाफ मदद कर सकती है, लेकिन एक सच्चे आदमी के बीच का हमला नहीं।

यदि आप कस्टम डोमेन पर google ऐप इंजन के लिए एसएसएल की तलाश कर रहे हैं, तो wwwizer.com पर एक नज़र डालें

निम्न पोस्ट बताती है कि जावास्क्रिप्ट के साथ प्रयास सुरक्षित संचार कैसे बनाएं और इसे कैसे गलत करें : SSL / HTTPS के बजाय जावास्क्रिप्ट एन्क्रिप्शन मॉड्यूल का उपयोग करें


1
यह निश्चित नहीं है कि इसे गुमनामी में क्यों डाला गया है, क्योंकि यह बहुत अच्छी बात है कि जावास्क्रिप्ट एन्क्रिप्शन को लागू करने के बारे में किसी को भी कम से कम विचार करने की आवश्यकता है। Upvoted।
जूल्स

एसएसएल से बचने के लिए क्लाइंट साइड क्रिप्टो का उपयोग करना एक पुराना बिंदु है जिसे कुछ लोग इसके खिलाफ जाने के लिए कहते हैं: वास्तव में यह HTTPS में सुरक्षा जोड़ सकता है, निष्क्रिय हमलों से बच सकता है, या डाउनलोड किए गए एप्लिकेशन और ब्राउज़र एक्सटेंशन में उपयोग किया जा सकता है। मैंने सिर्फ एक बार इसे गलत इस्तेमाल किया था (मेरा कॉलेज, लेकिन उन्होंने पहले से ही इसे ठीक कर लिया था) और कई बार सही इस्तेमाल किया (उदाहरण के तौर पर क्रिप्टोकरंसी)।
गुस्तावो रॉड्रिग्स



1

यहाँ एकमात्र समाधान है जो मेरे लिए काम कर रहा है:

http://www.hanewin.net/encrypt/aes/aes.htm

यह बहुत बुनियादी है, लेकिन उपयोग करने के लिए सरल है और अच्छी तरह से काम करता है।


आप वास्तव में एन्क्रिप्ट और डिक्रिप्ट फ़ंक्शन को कैसे कहते हैं?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.