2012-09-24 25 views
5

मेरे पास JSON arrays की एक सरणी है जिसका मूल्य मैं क्रिप्टोजेएस के साथ एन्क्रिप्ट करने की कोशिश कर रहा हूं और फिर किसी अन्य फ़ाइल में उपयोग के लिए प्रिंट करता हूं, जहां इन मानों को उपयोगकर्ता द्वारा दिए गए पासफ्रेज़ का उपयोग करके डिक्रिप्ट किया जाना चाहिए।मेरा क्रिप्टो जेएस एन्क्रिप्शन/डिक्रिप्शन काम नहीं कर रहा है

लेकिन मैं कुछ गलत कर रहा हूं और मुझे यूआरएल को डिक्रिप्ट करते समय "असफल त्रुटि: खराब यूटीएफ -8 डेटा" मिल रहा है।

encrypt.js:

var encrypted = CryptoJS.AES.encrypt(item[key], pass); 
json[j] += encrypted.ciphertext.toString(CryptoJS.enc.Base64); 

decrypt.js:

var decrypted = CryptoJS.AES.decrypt(item[key], pass); 
html += '<a href="' + decrypted.toString(CryptoJS.enc.Utf8) + '" target="_blank" class="socialico ' + key + '">' + icons[key] + '</a>'; 

मैं this उदाहरण का पालन किया ... सहायता, सुंदर कृपया?

उत्तर

11

यह त्रुटि संदेश आमतौर पर डेटा का सही ढंग से डिक्रिप्ट नहीं किया गया था, और परिणामी सादे टेक्स्ट बाइट वैध यूटीएफ -8 वर्ण नहीं बनाते हैं।

कुछ बातें की जांच करने के:

  • सबसे पहले, सुनिश्चित करें कि आप दोनों एन्क्रिप्शन और डिक्रिप्शन के लिए एक ही पासवर्ड का उपयोग कर रहे हैं। आप सही पासवर्ड का हैश रखना चाहते हैं ताकि आप यह सत्यापित कर सकें कि उपयोगकर्ता ने डिक्रिप्शन के लिए इसका उपयोग करने से पहले सही पासवर्ड दिया है या नहीं।
  • दूसरा, सुनिश्चित करें कि item[key] मान एन्क्रिप्टिंग से पहले एक स्ट्रिंग है। CryptoJS JSON ऑब्जेक्ट को एन्क्रिप्ट नहीं कर सकता है। आपको पहले इसे क्रमबद्ध करना होगा।
+0

आपकी रुचि के लिए धन्यवाद। मैंने दोनों फाइलों में 'var pass =' ​​something'' 'और 'console.log (typeof (item [key]) ==' string ') का उपयोग किया, सभी वस्तुओं के लिए मुद्रित सत्य। – Viktor

+6

आह। मैंने एक और संभावित समस्या देखी। एन्क्रिप्शन के दौरान उपयोग किए जाने वाले डिक्रिप्शन के लिए आपको उसी IV का उपयोग करने की आवश्यकता है। आम तौर पर चतुर्थ को सिफरटेक्स्ट के साथ क्रमबद्ध किया जाता है, लेकिन आप स्पष्ट रूप से चतुर्थ के बिना केवल सिफरटेक्स्ट को सहेज रहे हैं। 'Encpted.ciphertext.toString (CryptoJS.enc.Base64) को' एन्क्रिप्टेड .toString() ' –

+0

में बदलने का प्रयास करें ओह, धन्यवाद! मैंने 'सिफरटेक्स्ट' और 'बेस 64' हटा दिया और अब यह काम करता प्रतीत होता है। अब मुझे सिर्फ जावास्क्रिप्ट का उपयोग करके एक सुंदर सुरक्षित वेबपेज मिला है! यह सुंदर, बहुत अच्छा है। – Viktor

संबंधित मुद्दे