Oracle Apex 21.1:如何使用散列密码创建、存储和检索(验证)用户
Posted
技术标签:
【中文标题】Oracle Apex 21.1:如何使用散列密码创建、存储和检索(验证)用户【英文标题】:Oracle Apex 21.1: how to's require for create, store and retrieve (authenticate) users with hashed passwords 【发布时间】:2022-01-06 07:02:42 【问题描述】:我正在使用 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 => 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……这不可能吗?或者我错过了什么?请指导。问候以上是关于Oracle Apex 21.1:如何使用散列密码创建、存储和检索(验证)用户的主要内容,如果未能解决你的问题,请参考以下文章
使用卡片区域下载 BLOB 文件 - Oracle Apex v21.1
如何执行已经存在的 PL/SQL。 (甲骨文 APEX 21.1)