Ошибка при использовании DBMS_CRYPTO, но при работе с dbms_obfuscation_toolkit - PullRequest
0 голосов
/ 13 июня 2019

Поймано SQLException :: java.sql.SQLException: ORA-29532: вызов Java завершен из-за необработанного исключения Java: java.sql.SQLException: не удалось получить сведения об учетной записи доступа к серверу: ORA-28817: функция PL / SQL вернула ошибку,

ORA-06512: в "SYS.DBMS_CRYPTO_FFI", строка 67

ORA-06512: в "SYS.DBMS_CRYPTO", строка 44

ORA-06512: в "NM.CIPHER ", строка 41

ORA-06512: в" NM.DEVICE_ACCOUNT ", строка 176

ORA-06512: в строке 1

ORA-06512: в«NM.DEVICE_PROCEDURES», строка 8

ORA-06512: в строке 1


Разработанный код

создать или заменить шифр ПАКЕТА, семь_байт RAW (7): = HEXTORAW ('00000000000000');

ФУНКЦИЯ make_8_bytes (p_string IN RAW) RETURN RAW IS v_length PLS_INTEGER: = MOD (utl_raw.length (p_string), 8);НАЧАТЬ, ЕСЛИ v_length = 0 ТОГДА ВОЗВРАТИТЬ p_string;ELSE RETURN utl_raw.concat (p_string, utl_raw.substr (seven_bytes, 1,8-v_length));END IF;END;

FUNCTION encrypt (p_string IN VARCHAR2, p_key IN RAW) RETURN RAW IS encrypted_raw RAW (2048);l_mod number: = dbms_crypto.ENCRYPT_DES + dbms_crypto.CHAIN_CBC + dbms_crypto.PAD_PKCS5;

BEGIN --dbms_obfuscation_toolkit.DESEnk_c________________________________ к_ к керам_бросам_брос_в_соби_обоз_в__дис_переменной_байке_в_дави_и_и_в_дискахencrypted_data => encrypted_raw);encrypted_raw: = dbms_crypto.encrypt (src => make_8_bytes (utl_raw.cast_to_raw (p_string)), тип => l_mod, ключ => make_8_bytes (p_key));

RETURN  encrypted_raw;

 EXCEPTION                
   WHEN OTHERS THEN 
            v_errm:=SUBSTR(SQLERRM,1,200);

END;

FUNCTION decrypt (p_string IN RAW, p_key IN RAW) RETURN VARCHAR2 IS decrypted_raw RAW (2048);l_ret varchar2 (2000);l_mod number: = dbms_crypto.ENCRYPT_DES + dbms_crypto.CHAIN_CBC + dbms_crypto.PAD_PKCS5;

BEGIN - dbms_obfuscation_toolkit.DESDeryryry_cry__d_D_Dryry_Dry_Dry_Dry_Dry_Dry_Dry_Dry_Dryry_D_Cryp_D_D_Cry_D_Cry_D_Cry_D_Dry_D_Cry_D_Dry_D_Cry_D_Dry_Dry_Dry_D_Cry_D_Cry_Dry_Dry_Dry_Dryry_D_Cryp_D_Cry_D_Dry_Dry_D_Dry_Dry_Dry_Dry_Dry_Dry_Dry_Dry_Dry_Dry_D_Dry_Rate_D_D_D_D_D_D_D_D_D_D_D_S_S_RUdecrypted_raw: = dbms_crypto.Decrypt (src => p_string, typ => l_mod, key => make_8_bytes (p_key));l_ret: = UTL_I18N.RAW_TO_CHAR (decrypted_raw, 'AL32UTF8');RETURN l_ret;--RETURN rtrim (utl_raw.cast_to_varchar2 (decrypted_raw), chr (0));

 EXCEPTION                
   WHEN OTHERS THEN 
            v_errm:=SUBSTR(SQLERRM,1,200);

END;КОНЕЦ ШИФРА;

1 Ответ

0 голосов
/ 13 июня 2019

Я попробовал ваш код, и результат был положительным.

Ошибка при использовании разных ключей для ENCRYPT и DECRYPT.

См. Пример ниже:

Та же клавиша для ENCRYPT и DECRYPT:

SELECT
    CIPHER.DECRYPT(CIPHER.ENCRYPT('stackoverflow', UTL_RAW.CAST_TO_RAW('123')), UTL_RAW.CAST_TO_RAW('123'))
FROM
    DUAL;

enter image description here

Различные клавиши для ENCRYPT и DECRYPT:

SELECT
    CIPHER.DECRYPT(CIPHER.ENCRYPT('stackoverflow', UTL_RAW.CAST_TO_RAW('123')), UTL_RAW.CAST_TO_RAW('1234'))
FROM
    DUAL;

enter image description here

...