在Java中重新实现openssl_random_pseudo_bytes函数的正确方法

时间:2016-08-15 10:43:23

标签: java php openssl cryptography

我需要重新实现PHP函数openssl_random_pseudo_bytes的行为,这是根据其description

  

openssl_random_pseudo_bytes - 生成伪随机字节串

因为它只是伪随机字节串,并且因为我需要它的十六进制表示,所以我只能使用this function。但还有其他参数:

  

crypto_strong

     

如果传入函数,这将包含一个布尔值   确定所使用的算法是否为加密算法的值   强大的",例如,安全使用GPG,密码等。如果它是真的   做了,否则为FALSE

我的问题的核心是:这个crypto_strong参数究竟是什么?我应该如何正确地重新实现这种行为?

NB!我可以将java.security.SecureRandom()课程用于此目的吗?

1 个答案:

答案 0 :(得分:2)

函数openssl_random_pseudo_bytes($length, &$crypto_strong)在第二个参数中指示接收指示生成的字节是否加密强。

此代码似乎用作:

openssl_random_pseudo_bytes(XX, true)

这没有意义,因为它似乎被视为输入参数而不是输出参数

在没有良好熵源的(嵌入式)设备上为RNG提供种子,可能是该函数将crypto_strong参数设置为false。显然,不可能将true设置为false,这样就会失败;即这是PHP代码中的一个错误(显然没有被PHP本身的相当宽松的类型系统捕获)。

PHP程序员可能试图表明需要加密强大的PRNG。所以new SecureRandom()似乎确实是最好的方式。