#php #oracle #encryption #openssl
#php #Oracle #шифрование #openssl
Вопрос:
У меня есть следующий код 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";
Комментарии:
1. Я ничего не знаю о PHP или Oracle, но для меня это не выглядит одинаково. Такие вещи, как: Использование «strtoupper» и IV в PHP, но не в Oracle, означало бы, что они никогда не будут работать. В PHP просто попробуйте простые строки и не используйте IV и посмотрите, работает ли это.
2. например, $ cipherATS = openssl_encrypt(«200601RR00001», «AES-128-CBC», «Это!@#@#SSkkLeoKeyWAA»);