¿Debo usar urandom o openssl_random_pseudo_bytes?

Estoy desarrollando un sitio en PHP 5.4 y me preguntaba qué es mejor usar para generar un sal aleatorio para la seguridad de contraseña.

$salt = sha1(openssl_random_pseudo_bytes(23));

o

$seed = '';
$a = @fopen('/dev/urandom','rb');
$seed .= @fread($a,23);
$salt = sha1(seed);

o debería simplemente ir con:

$salt =  openssl_random_pseudo_bytes(40);

o

$salt = '';
$a = @fopen('/dev/urandom','rb');
$salt .= @fread($a,23);

Respuestas a la pregunta(2)

Su respuesta a la pregunta