Criptografia Java e descriptografia de Javascript [fechado]
Estou tentando criptografar dados em java e descriptografar o mesmo em javascript. Já existe uma pergunta semelhante no SO, mas não funciona para mim.
Minha pergunta é - O texto criptografado fornecido pelo código Java não está sendo descriptografado pelo Javascript. Eu codifiquei o texto e a chave criptografados no meu JS abaixo.
P.S. Eu sei que a descriptografia na interface do usuário é inútil, pois a Key ficará visível e qualquer usuário pode decodificar o código. Mas meu requisito é ignorar uma ferramenta de Teste de penetração. Por isso, sugiro como isso pode ser feito
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"));
}
}
A execução do código acima no eclipse gera a seguinte saída -
Chave2 = [B @ 670b5064
Criptografia = [B @ 3c8b22e5
Agora vou usar esses dados para o meu 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 );
Saída do código JS -
decryptedText - (Em branco, nada aparece). Por favor, encontre JS Fiddle -http://jsfiddle.net/achyut/pKNzV/11/