PL/SQL中是否有哈希函数?

jom*_*ora 14 oracle hash plsql oracle-sqldeveloper

我正在寻找PL/SQL中的Hash函数,以获取varchar的哈希值.我在Oracle 10中找到了一个名为dbms_crypto的软件包,其函数为dbms_crypto.hash,甚至还有其他软件包dbms_sqlhash.getHash,但是在我调用它们的地方,我收到的消息就是找不到它们...

有人知道我怎么称呼他们?还有其他套餐吗?

这是我的代码

DECLARE
 l_textToHash VARCHAR2(19) := 'toto123';
 l_ccn_raw RAW(128) := utl_raw.cast_to_raw(l_textToHash);
 l_encrypted_raw RAW(2048);
BEGIN
  dbms_output.put_line('CC:  ' || l_ccn_raw);
  l_encrypted_raw := dbms_crypto.hash(l_ccn_raw, 3);
  dbms_output.put_line('SH1: ' || l_encrypted_raw);
END;
/
Run Code Online (Sandbox Code Playgroud)

这是消息

Error starting at line 1 in command:
DECLARE
 l_textToHash VARCHAR2(19) := 'toto123';
 l_ccn_raw RAW(128) := utl_raw.cast_to_raw(l_textToHash);
 l_encrypted_raw RAW(2048);
BEGIN
  dbms_output.put_line('CC:  ' || l_ccn_raw);
  l_encrypted_raw := dbms_crypto.hash(l_ccn_raw, 3);
  dbms_output.put_line('SH1: ' || l_encrypted_raw);
END;
Error report:
ORA-06550: line 7, column 22:
PLS-00201: identifier 'DBMS_CRYPTO' must be declared
ORA-06550: line 7, column 3:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:
Run Code Online (Sandbox Code Playgroud)

谢谢!

Jus*_*ave 23

根据您尝试生成哈希的原因,内置函数ORA_HASH可能就足够了,

SQL> select ora_hash( 'fuzzy bunny' ) from dual;

ORA_HASH('FUZZYBUNNY')
----------------------
            2519249214
Run Code Online (Sandbox Code Playgroud)

如果您需要加密安全散列函数,我不会尝试使用它.但是如果你只需要一个简单的哈希,那就足够了.

  • 不幸的是,内置函数ORA_HASH可用于SQL但不适用于PL/SQL.如果我们希望从PL/SQL(至少在Oracle 10g)调用它,则需要使用SELECT ORA_HASH(DATA)INTO变量FROM DUAL之类的东西. (3认同)

N W*_*est 15

确保您具有授予您要连接的用户的相应权限.与您的DBA交谈,在SYS.DBMS_CRYPTO包中添加执行权限.

Oracle提供了一个使用oracle数据库处理散列和加密数据的很好的指南.

如果您使用的是不支持DBMS_CRYPTO的旧版数据库,则还可以尝试DBMS_OBFUSCATION_TOOLKIT.

在Oracle 12c中,您可以使用STANDARD_HASH函数.