PHP でランダムな 128 ビットの 16 進数を生成したいと思います。
どうやってやるの?
私が知っている最も単純なもの:
$str = openssl_random_pseudo_bytes(16);
ループごとに文字を追加して、16 文字の文字列を作成することもできます。
for ($i = 0; $i != 16; ++$i) {
$str .= chr(mt_rand(0, 255));
}
16 進数に変換するには、 を使用しますbin2hex($str)
。または、私が書いた以前の回答で説明されているように、UUID v4 を生成します。
PHP 7 以降でrandom_bytes
は、ランダム データを生成する最良の方法ですが、random_compatライブラリを使用しrandom_bytes()
て、言語の古いバージョンに前方互換性のあるサポートを追加できます。このライブラリは、別の方法で言及されているopenssl_random_pseudo_bytes()
.
// generates 64-character (256-bit) key
function generate_256bit() {
return bin2hex(random_bytes(32));
}
// generates 32-character (128-bit) key
function generate_128bit() {
return bin2hex(random_bytes(16));
}
// 256-bit: f3af82d0bedc3a91b3b5a51beefe553e33a17912de45d3302ed0216ad867cd55
// 128-bit: 4d7245e2d61cfcce2feafd7e687cdb0e
<?php
function string_random($characters, $length)
{
$string = '';
for ($max = mb_strlen($characters) - 1, $i = 0; $i < $length; ++ $i)
{
$string .= mb_substr($characters, mt_rand(0, $max), 1);
}
return $string;
}
// 128 bits is 16 bytes; 2 hex digits to represent each byte
$random_128_bit_hex = string_random('0123456789abcdef', 32);
// $random_128_bit_hex might be: '4374e7bb02ae5d5bc6d0d85af78aa2ce'