oracle PL/SQL中有哈希函数吗?

hgncfbus  于 2023-05-28  发布在  Oracle
关注(0)|答案(2)|浏览(172)

我在PL/SQL中寻找一个哈希函数,以获取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;
/

留言如下

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:

谢谢!

qxgroojn

qxgroojn1#

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

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

ORA_HASH('FUZZYBUNNY')
----------------------
            2519249214

如果你需要一个加密安全的哈希函数,我不会尝试使用这个。但如果你只需要一个简单的哈希,这应该足够了。

busg9geu

busg9geu2#

在Oracle 12c中,可以使用函数STANDARD_HASH。
在Oracle 11g和更低版本中,请确保您已向要连接的用户授予适当的权限。与您的DBA联系,添加对SYS.DBMS_CRYPTO包的执行权限。
Oracle提供了一个很好的指南,说明如何使用oracle数据库处理散列和加密数据。
如果您使用的是不支持DBMS_CRYPTO的旧版本数据库,则也可以尝试DBMS_OBFUSCATION_TOOLKIT。

相关问题