2016-08-15 86 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()似乎確實是最好的選擇。