如何在oracle中使用DBMS_CRYPTO.encrypt函数

ITQ*_*est 5 database oracle database-administration oracle10g oracle11g

我想加密数据库中的密码列,并且我正在尝试使用DBMS_CRYPTO包中存在的加密函数(已将 sys 帐户的执行访问权限授予当前用户),但出现以下错误。请举例说明如何使用此功能:

select DBMS_CRYPTO.encrypt('12345', dbms_crypto.DES_CBC_PKCS5, 'A1') from dual;
Run Code Online (Sandbox Code Playgroud)

错误:

ORA-06553: PLS-221: 'DES_CBC_PKCS5' 不是过程或未定义 06553. 00000 - "PLS-%s: %s"

Mar*_*ber 5

常量 dbms_crypto.DES_CBC_PKCS5 仅可在 PL/SQL 上引用 - 而不是来自 SQL。

您必须在 SELECT 语句中用文字值替换它。

要获取值,请使用 PL/SQL 块

 begin
   dbms_output.put_line(dbms_crypto.DES_CBC_PKCS5);
 end;
 /
Run Code Online (Sandbox Code Playgroud)

.

 4353
Run Code Online (Sandbox Code Playgroud)

您还必须使用更长的密钥

 select DBMS_CRYPTO.encrypt(UTL_RAW.CAST_TO_RAW ('ABCDEFGH12345'), 4353 /* = dbms_crypto.DES_CBC_PKCS5 */, 'A1A2A3A4A5A6CAFE') from dual;

 9320CBCBD25E8721BD04990A0EAEAF00
Run Code Online (Sandbox Code Playgroud)