2012-09-24 24 views
5

Tengo una matriz de matrices JSON cuyos valores estoy tratando de cifrar con CryptoJS y luego imprimo para usar en otro archivo, donde estos valores deben descifrarse usando una frase de contraseña dada por el usuario.Mi cifrado/descifrado CryptoJS no funciona

Pero estoy haciendo algo mal y obtengo "Error no detectado: datos UTF-8 mal formados" al descifrar las 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>'; 

que siguieron this ... Ayuda ejemplo, bastante por favor?

Respuesta

11

Ese mensaje de error por lo general significa que los datos no se descifraron correctamente, y los bytes resultantes de texto plano no forman caracteres UTF-8 válidos.

Un par de cosas a comprobar:

  • En primer lugar, asegúrese de que está utilizando la misma clave para el cifrado y el descifrado. Es posible que desee mantener un hash de la contraseña correcta para que pueda verificar si el usuario dio la contraseña correcta antes de usarla para el descifrado.
  • En segundo lugar, asegúrese de que el valor item[key] es una cadena antes de cifrar. CryptoJS no puede cifrar objetos JSON. Tendrás que serializarlo primero.
+0

Gracias por su interés. Usé el mismo 'var pass = 'something'' en ambos archivos y' console.log (typeof (item [key]) ==' string ') 'impreso verdadero para todos los artículos. – Viktor

+6

Ahh. Noté otro problema probable. Debe usar el mismo IV para descifrado que se usó durante el cifrado. Normalmente, el IV se serializa junto con el texto cifrado, pero se guarda explícitamente solo el texto cifrado, sin el IV. Intenta cambiar 'encrypted.ciphertext.toString (CryptoJS.enc.Base64)' por 'encrypted.toString()' –

+0

¡Oh, gracias! Quité el 'texto cifrado' y' Base64' y ahora parece funcionar. ¡Ahora tengo una página web bastante segura usando solo JavaScript! Eso es bonito, muy bueno. – Viktor

Cuestiones relacionadas