DBMS_CRYPTO.ENCRYPT возвращает разные результаты в разных oracle версиях БД - PullRequest
1 голос
/ 26 мая 2020

У меня досадная проблема, по которой у меня нет идей. При использовании функции DBMS_CRYPTO.ENCRYPT пакета oracle dbms_crypto я получаю другой результат в oracle 11 C и oracle 19. Впервые я заметил эту проблему при переносе базы данных с 11 c на 19 *. 1020 * и возникает проблема при расшифровке сохраненных значений.

Следующий запрос sql иллюстрирует эту проблему:

select rawtohex(DBMS_CRYPTO.ENCRYPT(src => UTL_I18N.STRING_TO_RAW ('TOENCRYPT', 'AL32UTF8'),typ => 5128 ,key => UTL_I18N.STRING_TO_RAW ('e24WwDYbk25wqe5pevJ3g3VJgyjXr6HX', 'AL32UTF8'))) from dual;

В oracle 11 c этот запрос возвращает 9A18D619A269A5AF9716F2869A8A4F5F, а в oracle 19 c он возвращает 049AFACC8EC7AE239EC496E5B4534048.

Я пытался выяснить, что могло вызвать эту разницу. Я проверил части запроса и выделил первое отличие от вывода функции шифрования.

Я также проверил с разными базами данных 11g, и запрос всегда давал один и тот же результат.

Кто-нибудь еще сталкивался с этой проблемой раньше и знает, как ее решить? Или кто-нибудь может дать мне несколько указателей относительно того, что повлияет на функции запроса?

1 Ответ

1 голос
/ 27 мая 2020

@ Намек TenG был точен.

typ = 5128 = 0x1408 
             0x1000 PAD_PKCS5
             0x0400 CHAIN_OFB
             0x0008 ENCRYPT_AES256

11.2         9A18D619A269A5AF9716F2869A8A4F5F
12.1         049AFACC8EC7AE239EC496E5B4534048

Согласно Oracle Support Do c ID 2014909.1, режим OFB не был должным образом реализован в 11.2 и фактически выполнял цепочку ECB.

             0x1000 PAD_PKCS5
             0x0300 CHAIN_ECB
             0x0008 ENCRYPT_AES256
typ = 4872 = 0x1308 

11.2         9A18D619A269A5AF9716F2869A8A4F5F
12.1         9A18D619A269A5AF9716F2869A8A4F5F

В других Другими словами, в 11.2, если вы просили OFB, вместо этого вы получали ECB. Если вы попросите ECB, вы получите одинаковое значение в обеих версиях.

...