Cifré por error algunos de mis valores en la base de datos dos veces. ¿Hay alguna forma de identificar el texto cifrado doblemente cifrado?
var ciphertext = cryptoJS.AES.encrypt(plainText, secretKey).toString(); var ciphertext2 = cryptoJS.AES.encrypt(ciphertext, secretKey).toString();Hay dos formas de hacer esto, y ambas son de alta certeza pero tienen inconvenientes.
En primer lugar, si no proporciona una clave / IV bien formateada, CryptoJS utilizará un mecanismo de derivación de clave OpenSSL para derivar la clave y la IV. Si usa toString() , entonces encadenará el resultado. Esto, por supuesto, agrega algunos gastos generales, por lo que si conoce el tamaño original del mensaje, simplemente puede intentar detectar el doble cifrado por el aumento del tamaño.
En segundo lugar, puede descifrar una vez y luego buscar el formato que genera toString . Esta es una cadena de base 64 que, después de la decodificación, debe contener Salted__ en ASCII (seguido por el salt y luego el texto cifrado AES-CBC / PKCS#7). Como es poco probable que su texto sin formato comience con Salted__ , esto debería ser suficiente para distinguirlo. Por lo tanto, su rutina de descifrado podría ejecutarse en un bucle hasta que ya no se encuentre la cadena Salted__ .
De lo contrario: el texto cifrado AES es completamente aleatorio, por lo que no puede ver nada mirando el texto cifrado en sí. En este caso, sin embargo, el texto cifrado es parte de un protocolo propietario, lo que abre algunas posibilidades.