1

此语句返回 null 而不是 64 个随机字节:

select DBMS_CRYPTO.RANDOMBYTES(64) from dual;

是什么导致它返回null?数据库是在 Windows Server 2003 上运行的 Oracle 10.1.0.2.0,我想使用随机字节作为密码散列的盐。

编辑:这是 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 上运行,但决定不使用那个旧数据库。

4

1 回答 1

0

它完美地工作。我已经在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>
于 2015-04-21T09:26:06.537 回答