DBMS_CRYPTO.RANDOMBYTES返回null

时间:2015-04-21 09:08:02

标签: database oracle encryption dbms-crypto

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

select DBMS_CRYPTO.RANDOMBYTES(64) from dual;

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

编辑:这是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 个答案:

答案 0 :(得分: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>