Pues veréis, tengo un problema algo curioso. Estoy desarrollando una web que tiene su base de datos y esta base de datos es alimentada por un programa escrito en Java. Hasta aqui no hay problema.
El problema viene cuando cifro los datos, es decir, si cifro 'hola' en php obtengo una cadena distinta a si lo cifro en java.
El método en ambos lenguaje es AES 256 cbc, o eso creo yo...
La función que cifra en php es la siguiente:
Código:
function encrypt($string) {
$output = false;
$encrypt_method = "AES-256-CBC";
$secret_key = 'abcdefghijklmnño';
$secret_iv = 'adb6ad2f3ae01b30';
// hash
$key = hash('sha256', $secret_key);
// iv - encrypt method AES-256-CBC expects 16 bytes - else you will get a warning
$iv = substr(hash('sha256', $secret_iv), 0, 16);
$output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
$output = base64_encode($output);
return $output;
}
Y la que cifra en Java es la siguiente:
Código:
public static String encrypt( String value) {
try {
String key = "abcdefghijklmnño";
String initVector = "adb6ad2f3ae01b30";
IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(value.getBytes());
System.out.println("encrypted string: "
+ Base64.encodeBase64String(encrypted));
return Base64.encodeBase64String(encrypted);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
¿Sabéis a que puede ser debido?
Gracias de antemano¡