Il mio problema è: cosa crittografo in Java Posso decodificare perfettamente in Java, ma PHP mcrypt
non può decrittografare. Cosa crittografo con mcrypt
Posso decifrare con mcrypt
, ma non posso in Java.Impossibile scambiare dati crittografati con AES-256 tra Java e PHP
Desidero inviare e ricevere dati crittografati da un'applicazione Java a una pagina PHP, quindi ho bisogno che sia compatibile.
Ecco quello che ho ...
JAVA ...
public static String crypt(String input, String key){
byte[] crypted = null;
try{
SecretKeySpec skey = new SecretKeySpec(Base64.decodeBase64(key), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skey);
crypted = cipher.doFinal(input.getBytes());
}catch(Exception e){
}
return Base64.encodeBase64String(crypted);
}
public static String decrypt(String input, String key){
byte[] output = null;
try{
SecretKeySpec skey = new SecretKeySpec(Base64.decodeBase64(key), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skey);
output = cipher.doFinal(Base64.decodeBase64(input));
}catch(Exception e){
}
return new String(output);
}
Esecuzione:
public static void main(String[] args) {
String key = "Zvzpv8/PXbezPCZpxzQKzL/FeoPw68jIb+NONX/LIi8=";
String data = "example";
System.out.println(Cpt.decrypt(Cpt.crypt(data, key), key));
}
uscita:
example
PHP ...
function getEncrypt($sStr, $sKey) {
return base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_256,
$sKey,
$sStr,
MCRYPT_MODE_ECB
)
);
}
function getDecrypt($sStr, $sKey) {
return mcrypt_decrypt(
MCRYPT_RIJNDAEL_256,
$sKey,
base64_decode($sStr),
MCRYPT_MODE_ECB
);
}
Esecuzione:
$crypt = getDecrypt(getEncrypt($str, $key), $key);
echo "<p>Crypt: $crypt</p>";
uscita:
Crypt: example�������������������������
Utilizzo di PHP per criptare "esempio" con il tasto "Zvzpv8/PXbezPCZpxzQKzL/FeoPw68jIb + NONX/LIi8 =" ottengo "YTYhgp4zC + w5IsViTR5PUkHMX4i7JzvA6NJT1FqhoGY =". Usando Java per criptare la stessa cosa con lo stesso tasto ottengo "+ tdAZqTE7WAVPXhB3Tp5 + g ==".
Sto codificando e decodificando su base64 nell'ordine corretto e ho testato la codifica base64 e decodificato la compatibilità tra Java e PHP e funziona.
Vedo, l'ho scoperto, ma pensavo che stavo usando AES-128. Quindi è davvero 256. Riguardo queste righe, l'ho fatto solo perché sono sicuro che i dati criptati contengono sempre solo stringhe e nessun dato binario. – LZZ