Есть ли хеш-функция в PL / SQL? - PullRequest
13 голосов
/ 08 апреля 2011

Я ищу хэш-функцию в 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:

Спасибо!

Ответы [ 2 ]

22 голосов
/ 08 апреля 2011

В зависимости от того, почему вы пытаетесь сгенерировать хеш, встроенной функции ORA_HASH может быть достаточно,

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

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

Я бы не стал использовать это, если вам нужна криптографически безопасная хеш-функция. Но если вам нужен простой хеш, этого должно быть достаточно.

13 голосов
/ 08 апреля 2011

Убедитесь, что у вас есть соответствующие разрешения, предоставленные пользователю, с которым вы подключаетесь. Поговорите со своим администратором базы данных, чтобы добавить разрешение на выполнение пакета SYS.DBMS_CRYPTO.

Oracle предоставляет хорошее руководство по работе с хешированными и зашифрованными данными с использованием базы данных Oracle.

Если вы используете более старую версию базы данных, которая не поддерживает DBMS_CRYPTO, вы также можете попробовать DBMS_OBFUSCATION_TOOLKIT.

В Oracle 12c вы можете использовать функцию STANDARD_HASH .

...