2012-09-24 13 views
5

Değerlerimi CryptoJS ile şifrelemeye çalıştığım ve daha sonra başka bir dosyada kullanılmak üzere yazdırmaya çalıştığım bir JSON dizisi dizim var; bu değerlerin kullanıcı tarafından verilmiş bir parola kullanılarak şifresi çözülmelidir.My CryptoJS şifreleme/şifre çözme çalışmıyor

Yanlış bir şey yapıyorum ve URL'lerin şifresini çözerken "Hatalı Hata: Hatalı Biçimlendirilmiş UTF-8 verileri" alıyorum.

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>'; 

oldukça ... Yardım this örnek lütfen takip?

cevap

11

Bu hata iletisi genellikle verilerin doğru bir şekilde şifresinin çözülmediği ve sonuçta elde edilen düz metin baytlarının geçerli UTF-8 karakterleri oluşturmadığı anlamına gelir. ,

  • Önce şifreleme ve deşifreleme için aynı şifreyi kullandığınızdan emin olun:

    birkaç nokta kontrol etmek. Doğru şifrenin bir kısmını saklamak isteyebilirsiniz, böylece şifreleme için kullanmadan önce kullanıcının doğru şifreyi verip girmediğini doğrulayabilirsiniz.

  • İkincisi, item[key] değerinin şifrelenmeden önce bir dize olduğundan emin olun. CryptoJS, JSON nesnelerini şifreleyemez. Önce serileştirmek zorundasın.
+0

İlginiz için teşekkür ederiz. Her iki dosyada da 'vari pass = 'bir şeyler' 've' console.log (typeof (item [key]) ==' string ') 'tüm öğeler için doğru basılmış. – Viktor

+6

Ahh. Başka bir problem olduğunu fark ettim. Şifreleme sırasında kullanıldığı gibi şifreleme için aynı IV'ü kullanmanız gerekir. Normalde, IV şifreli metinle birlikte serileştirilir, ancak IV olmadan yalnızca şifreli metni kaydedebilirsiniz. 'Encrypted.ciphertext.toString (CryptoJS.enc.Base64) '' şifrelemeli.toString() ' –

+0

' u değiştirmeyi deneyin, teşekkürler! 'Şifreli metin' ve 'Base64' kaldırdım ve şimdi çalışıyor gibi görünüyor. Şimdi sadece JavaScript kullanarak oldukça güvenli bir web sayfası aldım! Bu çok hoş, oldukça havalı. – Viktor