У меня есть следующий код Oracle и соответствующий PHP, но оба возвращают разные результаты. Код Oracle:
DECLARE
raw_key RAW(200);
encryption_type NUMBER;
encrypted_result VARCHAR2(4000);
decrypted_result VARCHAR2(4000);
v_key VARCHAR2(4000) := 'This!@#@#SSkkLeoKeyWAA';
BEGIN
raw_key := utl_i18n.string_to_raw(v_key, 'UTF8');
encryption_type := dbms_crypto.encrypt_aes128 + dbms_crypto.chain_cbc + dbms_crypto.pad_pkcs5;
encrypted_result := dbms_crypto.encrypt(utl_i18n.string_to_raw('200601RR00001', 'UTF8'), encryption_type, raw_key);
decrypted_result := dbms_crypto.decrypt(encrypted_result, encryption_type, raw_key);
dbms_output.put_line(encrypted_result);
Перевод PHP На основе PHP-документа http://php.net/manual/en/function.openssl-encrypt.php Я придумал этот
$string = strtoupper(implode(unpack("H*", "200601RR00001")));
$key = strtoupper(implode(unpack("H*", "This!@#@#SSkkLeoKeyWAA")));
$cipher="AES-128-CBC";
$ivlen = openssl_cipher_iv_length($cipher);
$iv = openssl_random_pseudo_bytes($ivlen);
$cipherATS = openssl_encrypt($string , $cipher, $key, 0 , $iv);
echo $cipherATS."\n";