ORA-28234: слишком короткая длина ключа при шифровании AES в Oracle - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь выполнить шифрование AES в Oracle и получаю ошибку ORA-28234: key length too short.

Однако длина ключа равна 32, и я считаю правильным.

select length('���(Df�%{�O�e�M5���� ���M�') from dual;

Вывод:

32

Я пробовал шифрование AES с тем же ключом в python и postgres, и оно работает штраф.

Пожалуйста, предложите.

Oracle AES Анонимный блок:

declare
 l_mod number;
 enc_val raw(2000);
begin
     l_mod:= dbms_crypto.ENCRYPT_AES + dbms_crypto.CHAIN_CBC+ dbms_crypto.AES_CBC_PKCS5;
     enc_val := dbms_crypto.encrypt(UTL_I18N.STRING_TO_RAW ('test',  'AL32UTF8'),l_mod,UTL_RAW.CAST_TO_RAW ('���(Df�%{�O�e�M5���� ���M�'));
     DBMS_OUTPUT.PUT_LINE('enc_val='||enc_val);

end;

Вывод:

Error report -
ORA-28234: key length too short
ORA-06512: at "SYS.DBMS_CRYPTO_FFI", line 3
ORA-06512: at "SYS.DBMS_CRYPTO", line 13
ORA-06512: at line 6
28234. 00000 -  "key length too short"
*Cause:    The key specified is too short for the algorithm. DES
           requires a key of at least 8 bytes. Triple DES requires a
           key of least 16 bytes in two-key mode and 24 bytes in three-key
           mode.
*Action:   Specify a longer key.

1 Ответ

1 голос
/ 16 января 2020

Согласно декодированию Base 64 в Python и Oracle код должен выглядеть примерно так:

DECLARE
 l_mod NUMBER;
 enc_val RAW(2000);
 KEY VARCHAR2(80) := 'rO0ABXVyAAJbQqzzF/gGCFTgAgAAeHAAAAAgGLCRnyhEZhzJJRd7EoVPp2XWTRgDNYHq4cAghvXvTaw=';

BEGIN
    l_mod:= DBMS_CRYPTO.ENCRYPT_AES + DBMS_CRYPTO.CHAIN_CBC+ DBMS_CRYPTO.AES_CBC_PKCS5;
    enc_val := DBMS_CRYPTO.ENCRYPT(UTL_I18N.STRING_TO_RAW('test',  'AL32UTF8'), l_mod, UTL_ENCODE.BASE64_DECODE(UTL_RAW.CAST_TO_RAW(KEY)) );
    DBMS_OUTPUT.PUT_LINE('enc_val = '||enc_val);

END;
...