Symfony2 SecureRandom を試してみます。

Symfony2.2で追加された SecureRandom を試してみます。

お題 : 3byteの16進表記数値を求める

こんな結果を得たいと思います。

$ php app/console sample:secure-random
65c5d8
0dc704
0c1f15
377ba6
8d9413
ae47ff
9abc51
b194bf
ca1344
cefb1c

実装コード

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Security\Core\Util\SecureRandom;

class TestSecureRandomCommand extends ContainerAwareCommand
{
    protected function configure()
    {
        $this->setName('sample:secure-random');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $generator = new SecureRandom();

        for ($i = 1; $i <= 10; $i++) {
            $randomBytes = $generator->nextBytes(3);
            echo bin2hex($randomBytes) . PHP_EOL;
        }
    }
}

Symfony\Component\Security\Core\Util\SecureRandom::nextBytes() の ソースを見ると
openssl_random_pseudo_byte() で実装されている様ですね。