Cómo cifrar DES datos existentes en la base de datos MySQL con los mismos resultados de cifrado que el cifrado DES en Java.
Mi primera opción fue verificar el ejemplo oficial y usar Base64 para codificar el cifrado. text Como resultado, me encontré con un gran problema. Pit
lt;script src="htt p://crypto-js.googlecod e.c om/svn/tags/3.1.2/build/ rollups/tripledes.js"gt;lt;/scriptgt;
lt;scriptgt;
var encrypted = CryptoJS.encrypt("Mensaje", "Frase de contraseña secreta"); p>
//El texto cifrado cada vez que se ejecuta cambiará
// ¿No debería ser el mismo el resultado de cada cifrado?
console.log(encrypted.toString(), encrypted.ciphertext.toString(CryptoJS.enc.Base64));
var decrypted = CryptoJS.DES decrypt(encrypted, " Frase de contraseña secreta");
console.log(decrypted.toString(CryptoJS.enc.Base64));
var decrypted = CryptoJS.DES.Utf8));
lt;/scriptgt;
Como no sabes nada sobre estos algoritmos de cifrado, debes buscarlo en Google
des cifrado: el valor cifrado de js no coincide con el cifrado de java valor
p>En cryptoJS tienes que convertir la clave a hexadecimal y luego usarla como una palabra como arriba (de lo contrario, será tratada como una contraseña)
Para la clave, Cuando pasa una cadena, se trata como una contraseña y se usa para derivar la clave real y el IV.
Resulta que no especificé la clave correctamente, usé una cadena como parámetro y supuse que esa era la clave. De hecho, esto no es una clave. CryptoJS calculará la clave real y el IV en función de esta cadena (los diversos términos nuevos no se explican, es inútil preguntarme, no entiendo -_-")
Entonces solo necesitamos convertir la cadena correspondiente a la clave y IV al tipo WordArray de CryptoJS y pasarla como parámetro en el cifrado DES Utf8.parse('inputvec');
var encrypted = CryptoJS.DES.encrypt('Message', keyHex, { iv: ivHex });
¿No es eso todo? No, es solo una trampa tras otra.
Si el resultado es el mismo, intentaremos el cifrado DES en el lado de Java nuevamente; consulte "Clase Java simple para cifrar cadenas DES"
Esto es realmente una trampa. Java cifra la cadena de mensaje a través de DES y el resultado es 8dKft9vkZ4I = diferente de CryptoJS...
Continúe pidiendo ayuda a Google
Valores de cifrado de C# y Java DES no son lo mismo Igual
El proveedor SunJCE utiliza ECB como modo predeterminado y PKCS5Padding como esquema de relleno predeterminado para DES. (Documentación JCA)
Esto significa que en el proveedor SunJCE,
Cipher c1 = Cipher.getInstance("DES/ECB /PKCS5Padding");
y
Cipher c1 = Cipher.getInstance("DES");
son declaraciones equivalentes.
Resulta que cuando CryptoJS realiza el cifrado DES, el modo predeterminado y el relleno son diferentes del modo predeterminado y el relleno de Java, por lo que se deben usar el modo ECB y PKCS5Padding, pero CryptoJS solo tiene Pkcs7, así que no me importa, pruébalo. ...