Cómo cifrar un mensaje en el lado del cliente usando la biblioteca crypto-js y descifrarlo en el servidor Java
Antecedentes: Se supone que la aplicación en la que estoy trabajando debe funcionar sin conexión. Tengo una página HTML5 y los datos ingresados por el usuario están encriptados usando la biblioteca crypto-js. Y quiero que el mensaje cifrado se envíe al servidor web de Java y luego descifrarlo en el lado del servidor.
Que estoy haciendo Puedo encriptar el mensaje usando Crypto-js
<code>
var message = "my message text";
var password = "user password";
var encrypted = CryptoJS.AES.encrypt( message ,password );
console.log(encrypted.toString());
// this prints an encrypted text "D0GBMGzxKXU757RKI8hDuQ=="
</code>
Lo que me gustaría hacer es pasar el texto cifrado "D0GBMGzxKXU757RKI8hDuQ ==" a un código del lado del servidor Java y obtener el mensaje cifrado descifrado.
Intenté muchas opciones para descifrar el mensaje cifrado crypto-js en el lado del servidor java. A continuación, encuentre mi código en el lado del servidor que se supone que descifra el texto cifrado.
<code>
public static String decrypt(String keyText,String encryptedText)
{
// generate key
Key key = new SecretKeySpec(keyText.getBytes(), "AES");
Cipher chiper = Cipher.getInstance("AES");
chiper.init(Cipher.DECRYPT_MODE, key);
byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedText);
byte[] decValue = chiper.doFinal(decordedValue);
String decryptedValue = new String(decValue);
return decryptedValue;
}
</code>
Llamo al método java descifrar del código siguiente
<code>
// performs decryption
public static void main(String[] args) throws Exception
{
String decryptedText = CrypterUtil.decrypt("user password","D0GBMGzxKXU757RKI8hDuQ==");
}
</code>
Pero obtengo la siguiente excepción cuando ejecuto el código de descifrado de Java
<code>
Exception in thread "main" java.security.InvalidKeyException: Invalid AES key length: 13 bytes
at com.sun.crypto.provider.AESCipher.engineGetKeySize(AESCipher.java:372)
at javax.crypto.Cipher.passCryptoPermCheck(Cipher.java:1052)
at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1010)
at javax.crypto.Cipher.implInit(Cipher.java:786)
at javax.crypto.Cipher.chooseProvider(Cipher.java:849)
at javax.crypto.Cipher.init(Cipher.java:1213)
at javax.crypto.Cipher.init(Cipher.java:1153)
at au.gov.daff.pems.model.utils.CrypterUtil.decrypt(CrypterUtil.java:34)
at au.gov.daff.pems.model.utils.CrypterUtil.main(CrypterUtil.java:47)
Process exited with exit code 1.
</code>
¿No estoy seguro de qué estoy haciendo mal? ... ¿Cuál es la mejor manera de encriptar un mensaje usando la biblioteca crypto-js para que pueda ser descifrado en otro lugar donde se usa la contraseña del usuario?