此语句返回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上不起作用,但决定不使用那个旧数据库。
答案 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>