web-dev-qa-db-ja.com

PL / SQLにハッシュ関数はありますか?

Varcharのハッシュを取得するために、PL/SQLでハッシュ関数を探しています。 Oracle 10で、関数dbms_crypto.hashおよびその他のパッケージdbms_sqlhash.getHashを含むdbms_cryptoというパッケージを見つけましたが、それらを呼び出すと、見つからないというメッセージが表示されます...

誰かが私がそれらを呼び出すことができる方法を知っていますか?他にパッケージはありますか?

これが私のコードです

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:

ありがとう!

14
jomaora

接続しているユーザーに適切な権限が付与されていることを確認してください。 DBAに相談して、SYS.DBMS_CRYPTOパッケージに実行権限を追加してください。

Oracleは、Oracleデータベースを使用したハッシュおよび暗号化されたデータの操作に関する優れた ガイド を提供します。

DBMS_CRYPTOをサポートしていない古いバージョンのデータベースを使用している場合は、DBMS_OBFUSCATION_TOOLKITを試すこともできます。

Oracle 12cでは、関数 STANDARD_HASH を使用できます。

14
N West

ハッシュを生成しようとしている理由によっては、組み込み関数ORA_HASHで十分な場合があります。

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

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

暗号的に安全なハッシュ関数が必要な場合は、これを使用しようとはしません。ただし、単純なハッシュが必要な場合は、これで十分です。

23
Justin Cave