【问题标题】:Oracle Apex 21.1: how to's require for create, store and retrieve (authenticate) users with hashed passwordsOracle Apex 21.1:如何使用散列密码创建、存储和检索(验证)用户
【发布时间】:2022-01-06 07:02:42
【问题描述】:

我正在使用 Oracle Apex 21.1 并希望为用户实施散列密码(公共页面,如电子商务网站)。如何在我的 Oracle Apex 应用程序中实现此功能?如果有适合初学者的分步教程,请分享链接。

【问题讨论】:

    标签: security hash 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 => UTL_I18N.STRING_TO_RAW (input_string,  'AL32UTF8'),
             typ => encryption_type,
             key => key_bytes_raw,
             iv  => iv_raw
          );
        -- The encrypted value "encrypted_raw" can be used here
    
       decrypted_raw := DBMS_CRYPTO.DECRYPT
          (
             src => encrypted_raw,
             typ => encryption_type,
             key => key_bytes_raw,
             iv  => iv_raw
          );
       output_string := UTL_I18N.RAW_TO_CHAR (decrypted_raw, 'AL32UTF8');
     
       DBMS_OUTPUT.PUT_LINE ('Decrypted string: ' || output_string); 
     
    END;
    

    【讨论】:

    • 感谢@Enrique Flores 的回复。我按原样运行代码,但 sqlplus 抛出错误“第 9 行错误:ORA-06550:第 9 行,第 29 列:PLS-00201:标识符 'DBMS_CRYPTO' 必须声明 ORA-06550:第 0 行,第 0 列:PL/SQL : 编译单元分析终止”当前使用的 oracle DB 版本是 21cXE。
    • 好的,它已经安装了,需要从 SYS 授予数据库用户才能访问它。只是一个问题,这些类型的散列密码可以在一段时间后解密吗?我尝试创建一个函数,将其作为 select get_pwd('mywife', 'enc') from dual 访问;它执行并向我显示加密的 mywife,但是当尝试解密该输出时,它显示类似的值而不是“mywife”,我想我失去了 mywife……这不可能吗?或者我错过了什么?请指导。问候
    猜你喜欢
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多