#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; она выполняется и показывает мне зашифрованную мою жену, но при попытке расшифровать этот вывод она показывает аналогичное значение вместо «моя жена», я думаю, что потерял свою жену… это невозможно? или я что-то упускаю? пожалуйста, ведите. с уважением