3

我想在 PHP 中生成一个随机的 128 位十六进制数。

我怎样才能做到这一点?

4

4 回答 4

4

我知道的最简单的:

$str = openssl_random_pseudo_bytes(16);

您还可以通过在每个循环中附加字符来构建 16 个字符的字符串:

for ($i = 0; $i != 16; ++$i) {
    $str .= chr(mt_rand(0, 255));
}

要将其转换为十六进制,请使用bin2hex($str). 或者,按照我之前写的答案中的描述生成一个 UUID v4 。

于 2012-10-03T18:20:45.090 回答
3

从 PHP 7 开始,random_bytes这是生成随机数据的最佳方法,但您可以使用random_compatrandom_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
于 2015-10-28T01:38:42.903 回答
1

自 PHP 5.3 起:

$rand128_hex = bin2hex(openssl_random_pseudo_bytes(16));
于 2014-02-28T19:29:17.083 回答
0
<?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'
于 2012-10-03T19:07:49.440 回答