Oracle Apex 21.1: как требуется для создания, хранения и извлечения (аутентификации) пользователей с хэшированными паролями

#security #hash #apex

Вопрос:

я использую Oracle Apex 21.1 и хочу реализовать хэшированные пароли для пользователей (общедоступная страница, например, веб-сайт электронной коммерции). Как я могу реализовать эту функцию в своем приложении Oracle Apex? если есть какой-либо пошаговый учебник по подходу для начинающих, пожалуйста, поделитесь ссылкой.

Ответ №1:

 DECLARE  input_string VARCHAR2 (200) := 'Secret Message';  output_string VARCHAR2 (200);  encrypted_raw RAW (2000); -- stores encrypted binary text  decrypted_raw RAW (2000); -- stores decrypted binary text  num_key_bytes NUMBER := 256/8; -- key length 256 bits (32 bytes)  key_bytes_raw RAW (32); -- stores 256-bit encryption key  encryption_type PLS_INTEGER := -- total encryption type  DBMS_CRYPTO.ENCRYPT_AES256    DBMS_CRYPTO.CHAIN_CBC    DBMS_CRYPTO.PAD_PKCS5;  iv_raw RAW (16);  BEGIN  DBMS_OUTPUT.PUT_LINE ( 'Original string: ' || input_string);  key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES (num_key_bytes);  iv_raw := DBMS_CRYPTO.RANDOMBYTES (16);  encrypted_raw := DBMS_CRYPTO.ENCRYPT  (  src =gt; UTL_I18N.STRING_TO_RAW (input_string, 'AL32UTF8'),  typ =gt; encryption_type,  key =gt; key_bytes_raw,  iv =gt; iv_raw  );  -- The encrypted value "encrypted_raw" can be used here   decrypted_raw := DBMS_CRYPTO.DECRYPT  (  src =gt; encrypted_raw,  typ =gt; encryption_type,  key =gt; key_bytes_raw,  iv =gt; iv_raw  );  output_string := UTL_I18N.RAW_TO_CHAR (decrypted_raw, 'AL32UTF8');    DBMS_OUTPUT.PUT_LINE ('Decrypted string: ' || output_string);    END;  

Комментарии:

1. спасибо @Enrique Flores за ответ. я запускаю код как есть, но sqlplus выдает ошибку «ОШИБКА в строке 9: ORA-06550: строка 9, столбец 29: PLS-00201: идентификатор» DBMS_CRYPTO «должен быть объявлен ORA-06550: строка 0, столбец 0: PL/SQL: Анализ единиц компиляции завершен» Версия oracle DB, используемая в настоящее время, составляет 21cXE.

2. хорошо, он уже установлен, и для доступа к нему необходимо предоставить доступ из системы пользователю базы данных. только один вопрос, могут ли эти типы хэшированных паролей быть расшифрованы через какой-то период времени ? я попытался создать функцию, получить к ней доступ как select get_pwd («моя жена», «enc») из dual; она выполняется и показывает мне зашифрованную мою жену, но при попытке расшифровать этот вывод она показывает аналогичное значение вместо «моя жена», я думаю, что потерял свою жену… это невозможно? или я что-то упускаю? пожалуйста, ведите. с уважением