У меня есть простой Java код фрагмент для AES-шифрования , который я хочу преобразовать в PHP, но вывод, который я получаю с Код PHP не соответствует выводу JAVA. Коды в Java и PHP находятся ниже со ссылкой для выполнения онлайн.
JAVA КОД:
(IDE: https://www.onlinegdb.com/online_java_compiler )
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
public class Main
{
public static SecretKeySpec getkey(String str) {
try {
return new SecretKeySpec(Arrays.copyOf(MessageDigest.getInstance("SHA-1").digest(str.getBytes("UTF-8")), 16), "AES");
} catch (NoSuchAlgorithmException e) {
} catch (UnsupportedEncodingException e2) {
}
return null;
}
public static String encrypt(String str) {
byte[] bArr;
try {
SecretKeySpec key = getkey("password");
Cipher instance = Cipher.getInstance("AES");
instance.init(1, key);
bArr = instance.doFinal(str.getBytes("UTF-8"));
} catch (Exception e) {
bArr = null;
}
return Base64.getEncoder().encodeToString(bArr);
}
public static void main(String[] args) {
String data = "hello";
String encryptedData = encrypt(data);
System.out.println(encryptedData);
}
}
Эквивалент PHP код (необходимо исправить):
(IDE: http://phpfiddle.org/ )
<?php
function encrypt($data, $key) {
$encrypted = openssl_encrypt($data, "aes-128-ecb", $key, 0,);
return base64_encode($encrypted);
}
$keyHex16 = substr(sha1('password'), 0, 32);
$key = hex2bin($keyHex16);
$data= 'hello';
$enc = encrypt($data, $key);
echo $enc;
?>