Есть ли какая-либо хэш-функция в PL/SQL? - программирование
Подтвердить что ты не робот

Есть ли какая-либо хэш-функция в PL/SQL?

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

Спасибо!

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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