Как достичь AES 128 ECB в PHP? - PullRequest
0 голосов
/ 02 марта 2020

У меня есть простой 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;

?>

...