Мне нужно сравнить данные между базой данных Oracle и базой данных MySQL.
В Oracle данные сначала зашифрованы алгоритмом AES-128
алгоритмом, а затем хешированы. Это означает, что невозможно восстановить данные и расшифровать его.
Те же данные доступны в MySQL, а в простом тексте. Итак, чтобы сравнить данные, я попытался зашифровать и затем перемешивать данные MySQL, следуя одинаковым этапам, выполненным в Oracle.
После многих попыток я наконец узнал, что aes_encrypt
в MySQL возвращает разные результаты, чем в Oracle.
-- ORACLE:
-- First the key is hashed with md5 to make it a 128bit key:
raw_key := DBMS_CRYPTO.Hash (UTL_I18N.STRING_TO_RAW ('test_key', 'AL32UTF8'), DBMS_CRYPTO.HASH_MD5);
-- Initialize the encrypted result
encryption_type:= DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5;
-- Then the data is being encrypted with AES:
encrypted_result := DBMS_CRYPTO.ENCRYPT(UTL_I18N.STRING_TO_RAW('test-data', 'AL32UTF8'), encryption_type, raw_key);
Результат для кода Oracle будет: 8FCA326C25C890846C25C8908446D28884394F2E222
-- MySQL
-- While doing the same with MySQL, I have tried the following:
SELECT hex(aes_encrypt('test-data', MD5('test_key'));
Результат для кода MySQL будет: dc7acac07f04bbe0ecec6b6934cf79fe
Я что-то упускаю? Или методы шифрования между различными языками не одинаковы?
Обновление:
Согласно комментариям ниже, я считаю, что я должен упомянуть тот факт, что результат dbms_crypto.hash
в Oracle - это то же самое, что результат, возвращаемый функцией MD5
в MySQL.
также с использованием CBC
или CBE
в Oracle дает тот же результат, поскольку IV не передается функции, при этом используется значение IV по умолчанию IV, которое NULL
Bounty: Если кто-то может проверить мой последний комментарий, и тот факт, что если использование той же прокладки с обеих сторон, даст те же результаты, получает Bounty:
@Rossum Padding по умолчанию в MySQL является PKCS7, ммм ... о. В Oracle Он использует PKCS5, не могу поверить, что я этого не заметил. Спасибо. (Кстати У Oracle не имеет опции PAD_PKCS7, не в 11G по крайней мере)