2012-09-24 91 views
5

Tôi có một mảng các mảng JSON có giá trị mà tôi đang cố mã hóa với CryptoJS và sau đó in để sử dụng trong tệp khác, nơi các giá trị này phải được giải mã bằng cụm mật khẩu do người dùng cung cấp.Mã hóa/giải mã CryptoJS của tôi không hoạt động

Nhưng tôi đang làm điều gì đó sai và tôi nhận được "Lỗi không bắt buộc: Dữ liệu UTF-8 không đúng định dạng" khi giải mã URL.

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

Tôi đi theo this dụ ... trợ giúp, xin vui lòng khá?

Trả lời

11

Thông báo lỗi đó thường có nghĩa là dữ liệu không được giải mã một cách chính xác và các byte văn bản kết quả không tạo thành các ký tự UTF-8 hợp lệ.

Một vài điều cần kiểm tra:

  • Trước tiên, hãy chắc chắn rằng bạn đang sử dụng cùng một mật khẩu cho cả mã hóa và giải mã. Bạn có thể muốn giữ một băm của mật khẩu chính xác để bạn có thể xác minh nếu người dùng đã cung cấp mật khẩu chính xác trước khi bạn sử dụng nó để giải mã.
  • Thứ hai, đảm bảo rằng giá trị item[key] là một chuỗi trước khi mã hóa. CryptoJS không thể mã hóa các đối tượng JSON. Bạn sẽ phải tuần tự hóa nó trước.
+0

Cảm ơn bạn đã quan tâm. Tôi đã sử dụng cùng 'var pass = 'something'' trong cả hai tệp và' console.log (typeof (item [key]) ==' string ') 'in true cho tất cả các mục. – Viktor

+6

Ahh. Tôi nhận thấy một vấn đề khác có thể xảy ra. Bạn cần sử dụng cùng một IV để giải mã như đã được sử dụng trong quá trình mã hóa. Thông thường IV được tuần tự hóa cùng với bản mã, nhưng bạn chỉ tiết kiệm một cách rõ ràng bản mã, không có IV. Hãy thử thay đổi 'encrypted.ciphertext.toString (CryptoJS.enc.Base64)' thành 'encrypted.toString()' –

+0

Ồ, cảm ơn bạn! Tôi đã gỡ bỏ 'ciphertext' và' Base64' và bây giờ nó có vẻ hoạt động. Bây giờ tôi đã cho tôi một trang web khá an toàn chỉ bằng JavaScript! Đó là khá, khá mát mẻ. – Viktor

Các vấn đề liên quan