Cifrado Java y descifrado Javascript [cerrado]
Estoy tratando de cifrar datos en java y descifrarlos en javascript. Ya hay una pregunta similar en SO pero no me funciona.
Mi pregunta es: el texto cifrado proporcionado por el código Java no se descifra mediante Javascript. He codificado el texto cifrado y la clave en mi JS a continuación.
PD Sé que el descifrado en la interfaz de usuario no sirve de nada, ya que Key será visible y cualquier usuario puede decodificar el código. Pero mi requisito para hacerlo es evitar una herramienta de prueba de penetración. Por lo tanto, súplicas, sugerimos cómo se puede hacer
Código Java
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class Crypt {
private static final String ALGO = "AES";
private static final byte[] keyValue =
new byte[] { 'A', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k','l', 'm', 'n', 'o', 'p'};
public static String encrypt(String Data) throws Exception {
Key key = generateKey();
String keyForJS = Base64.encodeBase64String(keyValue);
System.out.println("Key2 = " + keyForJS);
Cipher c = Cipher.getInstance(ALGO);
c.init(Cipher.ENCRYPT_MODE, key);
byte[] encVal = c.doFinal(Data.getBytes());
String encryptedValue = Base64.encodeBase64(encVal).toString();
return encryptedValue;
}
private static Key generateKey() throws Exception {
Key key = new SecretKeySpec(keyValue, ALGO);
return key;
}
public static void main(String a[]) throws Exception
{
System.out.println("Encryption = " + Crypt.encrypt("Test"));
}
}
La ejecución del código anterior en eclipse genera el siguiente resultado:
Clave2 = [B @ 670b5064
Cifrado = [B @ 3c8b22e5
Ahora usaré estos datos para mi código JS
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/mode-ecb-min.js"></script>
var base64Key = "[B@670b5064"; // This is the output key from Java
var key = CryptoJS.enc.Base64.parse(base64Key);
var decryptedData = CryptoJS.AES.decrypt( "[B@3c8b22e5", key, { // This is the Output text from Java
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
} );
var decryptedText = decryptedData.toString( CryptoJS.enc.Utf8 );
console.log( "decryptedText = " + decryptedText );
Salida de código JS -
decryptedText - (Está en blanco, no aparece nada). Por favor encuentre JS Fiddle -http://jsfiddle.net/achyut/pKNzV/11/