2016-08-15 23 views
2

我需要重新实现PHP函数openssl_random_pseudo_bytes的行为,根据其description有道重新实现openssl_random_pseudo_bytes功能的Java

openssl_random_pseudo_bytes - 生成字节的伪随机字符串

因为它只是伪随机字节的字符串,因为我需要它的十六进制表示,我可以只使用this function。但也有附加参数:

crypto_strong

如果传递给函数,这将举行一个布尔 值,确定是否使用的算法是“加密 强”,例如,安全的用法与GPG,密码等TRUE如果 做,否则返回FALSE

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

注意!我可以用java.security.SecureRandom()这个类吗?

+0

您是否需要重复给定特定种子(即密钥流)的相同数据,还是需要随机数? –

+1

那么,在原来的'php'代码中,这个函数的用法是:'openssl_random_pseudo_bytes(XX,true)'。 – Andremoniy

回答

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()似乎确实是最好的选择。