DBMS_CRYPTO.RANDOMBYTES возвращает ноль

Этот оператор возвращает ноль вместо 64 случайных байтов:

select DBMS_CRYPTO.RANDOMBYTES(64) from dual;

Что заставляет его возвращать ноль? База данных - Oracle 10.1.0.2.0, работающая на Windows Server 2003, и я хочу использовать случайные байты в качестве соли для хеширования паролей.

Изменить: Вот вывод из sqlplus:

Connected to:
Oracle Database 10g Release 10.1.0.2.0 - Production

SQL> select DBMS_CRYPTO.RANDOMBYTES(64) from dual;

DBMS_CRYPTO.RANDOMBYTES(64)
--------------------------------------------------------------------------------



SQL>

Edit2: при переходе на Oracle 11 запрос работает. Я понятия не имею, почему он не работает в Oracle 10, но решил не использовать эту старую базу данных.

1 ответ

Работает отлично. Я проверил это на Oracle 12c.

Обновить

Я проверил My Oracle Support (Metalink), однако не нашел ничего связанного с этой функцией, возвращающей NULL. Конечно, не ошибка.

В любом случае, рассматривая функцию и ее использование в документации, я наткнулся на SQLNET.CRYPTO_SEED.

SQLNET.CRYPTO_SEED

Цель

Используйте параметр SQLNET.CRYPTO_SEED, чтобы указать символы, используемые при генерации криптографических ключей. Чем больше случайных символов, тем сильнее клавиши. Строка должна содержать 10-70 случайных символов. Этот необязательный параметр необходим, когда включено шифрование или контрольная сумма. Шифрование включается, если для клиента указан параметр SQLNET.ENCRYPTION_CLIENT, а для сервера базы данных задан параметр SQLNET.ENCRYPTION_SERVER; контрольная сумма включена, если для клиента указан параметр SQLNET.CRYPTO_CHECKSUM_CLIENT, а для сервера базы данных - параметр SQLNET.CRYPTO_CHECKSUM_SERVER.

Возможно, параметр неправильно установлен в вашей среде. У меня нет версии 10g (хотя и устарела) для тестирования.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing option

SQL> select DBMS_CRYPTO.RANDOMBYTES(64) from dual;

DBMS_CRYPTO.RANDOMBYTES(64)
--------------------------------------------------------------------------------
427AECD44D27CDF6CDC8F290D9F8079109BAB8AECD7E687E7ADF8E15825BBDF3D746FBC181059443
965B1425B224CC46E8CD07CC2D02B2E023238E8883520A19


SQL>
Другие вопросы по тегам